You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使.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配置实现自动复制逻辑:

    1. 在类库项目根目录创建[你的库名称].targets文件,内容如下:
      <Project>
        <ItemGroup>
          <None Include="$(MSBuildThisFileDirectory)..\lib\$(TargetFramework)\$(AssemblyName).xml" 
                CopyToOutputDirectory="PreserveNewest" 
                Visible="false" />
        </ItemGroup>
      </Project>
      
    2. 在类库的.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文件
  • 清理缓存并重建
    执行命令清理本地NuGet缓存:

    dotnet nuget locals all --clear
    

    重新生成类库项目得到新的NuGet包,在引用项目中卸载并重新安装该包,最后清理并重建引用项目。

内容的提问来源于stack exchange,提问作者aybe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:21:01