如何在NuGet包中为类库包含Xml Docs?

Joh*_*son 93 c# nuget nuget-package

我正在为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>
Run Code Online (Sandbox Code Playgroud)

当我使用此命令构建包时:

nuget pack MyLibrary.nuspec
Run Code Online (Sandbox Code Playgroud)

它会产生错误.如果我删除该行:

<file src="..\..\build\MyLibrary.xml" target="lib\Net40" />
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*son 91

问题是我没有检查"生成Xml文档"我正在使用的构建配置.那个nuspec是正确的.

在此输入图像描述

  • 很高兴知道.我正在尝试使用GUI创建一个包,它试图让我将XML文件移动到内容文件夹而不是lib.似乎没错,所以我想得到第二个意见.很高兴你有这篇文章.:-) (6认同)

byt*_*dev 24

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

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

<PropertyGroup>
    <DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

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

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

<NoWarn>$(NoWarn);1591</NoWarn>
Run Code Online (Sandbox Code Playgroud)

  • `&lt;GenerateDocumentationFile&gt;` 已经生成了 `&lt;DocumentationFile&gt;`,所以我认为只需要两者之一,请参阅:https://docs.microsoft.com/en-us/dotnet/csharp/codedoc (5认同)