.NET Framework项目打包NuGet:如何将Microsoft.XmlSerializer.Generator设为仅构建依赖
解决方案
要将Microsoft.XmlSerializer.Generator设置为仅当前项目的构建依赖,不随NuGet包分发,只需修改项目的PackageReference配置,同时移除冗余的DotNetCliToolReference,具体步骤如下:
移除旧的DotNetCliToolReference
SDK风格的.NET Framework项目无需使用DotNetCliToolReference引用构建工具,这是早期.NET Core的遗留配置,会导致下游项目尝试调用全局工具,引发警告。直接删除这一行即可。配置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>
- 重新打包验证
执行dotnet pack MyProject.csproj重新生成NuGet包,打开生成的.nuspec文件,确认Microsoft.XmlSerializer.Generator不再出现在依赖项列表中。此时下游的经典.NET Framework项目引用该NuGet包时,就不会再出现构建警告,同时MyProject.XmlSerializers.dll仍会正常被复制到下游项目的bin目录。
原理说明
PrivateAssets="All":标记该包的所有资产(包括构建脚本、工具等)都不会被传递给依赖当前项目的其他项目,也不会被包含在NuGet包的依赖声明中。IncludeAssets="Build":指定仅在构建过程中使用该包的构建相关资产,不需要将其作为运行时依赖引入。
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

