如何在 NuGet 包中包含类库的 XmlDocs?

我正在为一个 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" />

Exe 成功地创建了 nupkg。我甚至可以解压缩包,并验证内容是正确的。我做错了什么?Xml 文件应该进入不同的目标目录吗?

26061 次浏览

The problem was that I didn't check "Generate Xml Documentation" for the build configuration I was using. That nuspec is correct.

enter image description here

In .NET Core/Standard you can do this by editing the project XML file, for example:

<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>

最简单的解决方案是简单地添加@bytedev 答案的前半部分。这将默认为正确的位置,并且将被正确打包。

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