PrunePackageReference 功能会自动删除目标平台提供的可传递包。 通过此更改,该功能还会标记具有和PackageReference属性的PrivateAssets=all可IncludeAssets=none修剪项。 这些属性可防止包出现在包的生成的依赖项列表中。
引入的版本
.NET 10
以前的行为
以前,如果启用了修剪功能,直接可修剪的PackageReference项仍会出现在生成的.nuspec依赖项列表中,即使这些包由平台提供也是如此。 如果您的项目是面向 .NET 10 的,那么它们可能会生成NU1510 警告。
例如,请考虑使用以下配置的多目标项目:
<PropertyGroup>
<TargetFramework>net10.0;net472</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Text.Json" Version="9.0.8" />
</ItemGroup>
此类项目文件生成了一个 .nuspec 文件,其中包含两个目标框架的依赖项:
<dependencies>
<group targetFramework=".NETFramework4.7.2">
<dependency id="System.Text.Json" version="9.0.8" />
</group>
<group targetFramework="net10.0">
<dependency id="System.Text.Json" version="9.0.8" />
</group>
</dependencies>
新行为
从 .NET 10 开始,启用修剪时,直接可修剪的 PackageReference 项将自动标记为 PrivateAssets=all 和 IncludeAssets=none,并被排除在由平台提供的目标框架生成的依赖项之外。 (但是,如果项目面向 .NET 10 或更高版本,仍会收到警告NU1510,直到从项目中删除引用。
现在,同一项目配置会生成一个 .nuspec 文件,其中包含从提供它的目标框架中删除的可修剪依赖项(.NET 10):
<dependencies>
<group targetFramework=".NETFramework4.7.2">
<dependency id="System.Text.Json" version="9.0.8" />
</group>
<group targetFramework="net10.0">
</group>
</dependencies>
中断性变更的类型
此更改为行为更改。
更改原因
此更改可确保包依赖项准确反映每个目标框架的实际要求。 当目标框架已经提供这些 API 时,它可以防止不必要的包引用出现在生成的包中。
建议的作
- 如果创建包并收到
NU1510警告,请按照此处的说明进行作。 - 如果创建包并且生成的 .nuspec 依赖项不包含 任何 目标框架的引用包,请从项目文件中删除引用,因为它不需要。
- 如果引用的包出现在 .nuspec 文件中,则无需执行任何作。
受影响的 API
没有。