【问题标题】:Xml documentation not packed in class library类库中未打包的 XML 文档
【发布时间】:2018-02-07 03:58:35
【问题描述】:

我有两个项目,MyModels(包含类模型)和 MyExample XML 文件是在 MyModels 项目中创建的,没关系。

现在在 MyExample 项目中,我通过 nuget 安装它来引用 MyModels,但是在安装 nuget 包时如何将 XML 文档包含在包中? (它总是失踪)

【问题讨论】:

  • ist是什么项目类型?你使用带有集成 NuGet(VS 2017“基于 sdk”的 csproj)的 csproj 还是 nuspec 来打包?
  • @001,您能分享一下关于这个问题的最新信息吗?
  • 我手动将 XML 文件复制到正确的目录,因为我无法让它工作。 :(

标签: c# xml visual-studio nuget nuget-package


【解决方案1】:

Xml 文档未打包在类库中

如果您在非“基于 SDK”的普通 .csproj 类型项目中,则可以使用 .nuspec 文件中的 <files> 节点直接包含 XML 文档以包含在包中,该节点位于 @ 后面987654331@标签:

  <files>
    <file src="bin\Debug\MyModels.dll" target="lib\Net45" />
    <file src="bin\Debug\MyModels.xml" target="lib\Net45" />
  </files>

以下是我的.nuspec

<?xml version="1.0"?>
<package >
  <metadata>
    <id>MyModels</id>
    <version>1.0.0</version>
    <authors>Tester</authors>
    <owners>Tester</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package description</description>
    <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>Tag1 Tag2</tags>
  </metadata>
  <files>
    <file src="bin\Debug\MyModels.dll" target="lib\Net45" />
    <file src="bin\Debug\MyModels.xml" target="lib\Net45" />
  </files>
</package>

然后build the package with this command:

nuget pack MyModels.nuspec

NuGet.exe 成功创建 nupkg:

如果您使用的是新的 .csproj 类型项目(基于 VS2017 SDK),您可以在您的 csproj 文件中设置 GenerateDocumentationFile

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>

</Project>

使用选项GenerateDocumentationFile,MSBuild 会将所有生成文件包含在 nuget 包中。

另外,如果你想把XML文档放到MyExample的项目中,你可以把目标改成内容:

  <files>
    <file src="bin\Debug\MyModels.dll" target="lib\Net45" />
    <file src="bin\Debug\MyModels.xml" target="Content\MyModels.xml" />
  </files>

希望这会有所帮助。

评论更新:

我用的是.NET Core 2,是一样的吗?

是的,你只需要更新.nuspec文件中的src和target:

  <files>
    <file src="bin\Debug\netcoreapp2.0\MyModels.dll" target="lib\netcoreapp2.0" />
    <file src="bin\Debug\netcoreapp2.0\MyModels.xml" target="lib\netcoreapp2.0" />
  </files>

或者你可以直接使用新的.csproj类型项目(基于VS2017 SDK),将GenerateDocumentationFile设置为.csproj文件,然后在属性的Package选项卡上勾选“Generate NuGet Package on build”复选框项目:

构建后,在输出文件夹生成nuget包:

注意:如果你想将 XML 文档添加到 MyExample 的项目中,你应该使用内容文件:

https://docs.microsoft.com/en-us/nuget/reference/nuspec#including-assembly-files

希望这会有所帮助。

【讨论】:

  • 谢谢leo的回复,我用的是.NET Core 2,是一样的吗?
  • @001,是的,你只需要在.nuspec文件中使用netcoreapp2.0,详情请查看我更新的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 2021-06-28
相关资源
最近更新 更多