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

.NET Framework项目打包NuGet:如何将Microsoft.XmlSerializer.Generator设为仅构建依赖

解决方案

要将Microsoft.XmlSerializer.Generator设置为仅当前项目的构建依赖,不随NuGet包分发,只需修改项目的PackageReference配置,同时移除冗余的DotNetCliToolReference,具体步骤如下:

  1. 移除旧的DotNetCliToolReference
    SDK风格的.NET Framework项目无需使用DotNetCliToolReference引用构建工具,这是早期.NET Core的遗留配置,会导致下游项目尝试调用全局工具,引发警告。直接删除这一行即可。

  2. 配置PackageReference为仅构建依赖
    修改Microsoft.XmlSerializer.Generator的PackageReference,添加PrivateAssets和IncludeAssets属性,确保该包仅在当前项目构建时使用,不会被传递给下游项目或包含在NuGet依赖中。修改后的配置如下:

<ItemGroup>
  <PackageReference Include="Microsoft.XmlSerializer.Generator" Version="9.0.1">
    <!-- 所有资产都不传递给依赖项目,也不包含在NuGet包依赖中 -->
    <PrivateAssets>All</PrivateAssets>
    <!-- 仅在构建阶段使用该包的构建目标/工具,无需运行时依赖 -->
    <IncludeAssets>Build</IncludeAssets>
  </PackageReference>
</ItemGroup>
  1. 重新打包验证
    执行dotnet pack MyProject.csproj重新生成NuGet包,打开生成的.nuspec文件,确认Microsoft.XmlSerializer.Generator不再出现在依赖项列表中。此时下游的经典.NET Framework项目引用该NuGet包时,就不会再出现构建警告,同时MyProject.XmlSerializers.dll仍会正常被复制到下游项目的bin目录。

原理说明

  • PrivateAssets="All":标记该包的所有资产(包括构建脚本、工具等)都不会被传递给依赖当前项目的其他项目,也不会被包含在NuGet包的依赖声明中。
  • IncludeAssets="Build":指定仅在构建过程中使用该包的构建相关资产,不需要将其作为运行时依赖引入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:19:57