我正在为 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>
当我build the package with this command:
nuget pack MyLibrary.nuspec
它会产生错误。如果我删除该行:
<file src="..\..\build\MyLibrary.xml" target="lib\Net40" />
NuGet.exe 成功创建 nupkg。我什至可以解压缩包,并验证内容是否正确。我究竟做错了什么? xml 文件是否应该进入不同的目标目录?
nuget pack library.csproj
(我没有 nuspec),但修复工作相同。
问题是我没有检查我正在使用的构建配置的“生成 Xml 文档”。那个 nuspec 是正确的。
https://i.stack.imgur.com/cP6EG.png
在 .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>
只允许您将文件输出到您想要的任何位置。如果您不指定它,我认为它实际上是把它放在我上面提供的路径中。
asm.Location
,这让我进入了bin\Debug\netcoreapp
等。