您如何在NuGet软件包中包含用于类库的Xml Docs?


103

我正在为C#类库创建一个NuGet包,并且我想在该库中包含生成的Xml文档。这是我的nuspec文件:

<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata>
    <id>MyLibrary</id>
    <version>1.0.0.0</version>
    <authors>John Nelson</authors>
    <language>en-US</language>
    <description>A C# class library</description>
  </metadata>
  <files>
    <file src="..\..\build\MyLibrary.dll" target="lib\Net40" />
    <file src="..\..\build\MyLibrary.xml" target="lib\Net40" />
  </files>
</package>

当我使用以下命令构建软件包时

nuget pack MyLibrary.nuspec

它产生一个错误。如果我删除该行:

<file src="..\..\build\MyLibrary.xml" target="lib\Net40" />

NuGet.exe成功创建了nupkg。我什至可以解压缩包,并验证其中的内容是否正确。我究竟做错了什么?xml文件应该进入另一个目标目录吗?


您使用什么命令来构建软件包?
上校恐慌2015年

@ColonelPanic使用命令和文档链接更新了问题。
约翰·尼尔森

谢谢约翰。我直接打包了一个csproj nuget pack library.csproj(我没有nuspec),但是修复方法是一样的。
上校恐慌2015年

Answers:


98

问题是我没有为正在使用的生成配置检查“ Generate Xml Documentation”。那nuspec是正确的。

在此处输入图片说明


6
很高兴知道。我正在尝试使用GUI创建一个包,并且试图让我将XML文件移动到内容文件夹而不是lib。似乎不正确,所以我想征询第二意见。很高兴您有此帖子。:-)
Mike Loux 2012年

11

在.NET Core / Standard中,您可以通过编辑项目XML文件来执行此操作,例如:

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

<PropertyGroup>
    <DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
</PropertyGroup>

这将在输出程序集旁边将文档输出为XML文件。

编辑: 作为旁注,一旦启用,GenerateDocumentationFile您可能会因未添加完整文档标签而在公共方法上收到很多警告。如果要禁用这些警告,只需添加PropertyGroup

<NoWarn>$(NoWarn);1591</NoWarn>

<GenerateDocumentationFile>结果<DocumentationFile>已经存在,因此我认为两者都只需要一个,请参阅:docs.microsoft.com/en-us/dotnet/csharp/codedoc
卡佩,

指定<DocumentationFile>自己只是允许您将文件输出到所需的任何位置。如果您不指定它,我认为它会把它放在我上面提供的路径中。
bytedev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.