如何使.NET 6 NuGet包的XML文档复制到项目输出目录?
.NET 6 NuGet包XML文档复制到输出目录的解决方法
针对NuGet包中XML文档未随DLL复制到引用项目输出目录的问题,可以通过以下步骤解决:
确保XML文件被正确打包进NuGet包
仅开启GenerateDocumentationFile和GeneratePackageOnBuild可能不足以让XML被正确纳入包结构,需要在类库项目的.csproj中显式配置XML的打包规则:<ItemGroup> <None Include="$(OutputPath)$(AssemblyName).xml" Pack="true" PackagePath="lib\$(TargetFramework)" /> </ItemGroup>或者通过统一配置让文档文件自动纳入打包范围:
<PropertyGroup> <DocumentationFile>$(OutputPath)$(AssemblyName).xml</DocumentationFile> <IncludeBuildOutput>true</IncludeBuildOutput> </PropertyGroup>通过.targets文件自动触发XML复制
即使XML已在NuGet包内,引用项目默认不会自动复制该文件,需要添加.targets配置实现自动复制逻辑:- 在类库项目根目录创建
[你的库名称].targets文件,内容如下:<Project> <ItemGroup> <None Include="$(MSBuildThisFileDirectory)..\lib\$(TargetFramework)\$(AssemblyName).xml" CopyToOutputDirectory="PreserveNewest" Visible="false" /> </ItemGroup> </Project> - 在类库的
.csproj中添加配置,将这个.targets文件打包到NuGet的build目录:<ItemGroup> <None Include="[你的库名称].targets" Pack="true" PackagePath="build" /> </ItemGroup>
其他项目引用该NuGet包时,会自动执行.targets中的复制规则,将XML文件同步到输出目录。
- 在类库项目根目录创建
验证NuGet包结构
将生成的.nupkg文件后缀改为.zip并解压,检查两个关键点:- XML文件是否存在于
lib/net6.0目录下 - 如果使用了.targets方案,
build目录下是否有对应的.targets文件
- XML文件是否存在于
清理缓存并重建
执行命令清理本地NuGet缓存:dotnet nuget locals all --clear重新生成类库项目得到新的NuGet包,在引用项目中卸载并重新安装该包,最后清理并重建引用项目。
内容的提问来源于stack exchange,提问作者aybe
相关产品推荐
相关产品推荐

