从 .NET 10 SDK 开始,启用修剪时,NuGet 会针对以下项目引发警告NU1510:
- 目标或多目标 .NET 10 或更高版本。
- 包括与框架提供的库重叠的直接包引用(即不需要引用)。
已引入的版本
.NET 10
以前的行为
以前,如果包与框架提供的库重叠,.NET SDK 将忽略包的内容。 允许包引用,但对生成输出没有影响。
新行为
从 .NET 10 SDK 开始,如果启用了修剪,并且项目面向 .NET 10 或更高版本,NuGet 会通过引发 NU1510 警告通知你任何不必要的包引用。
破坏性变更的类型
此更改可能会影响 源兼容性。
更改原因
此更改通过消除未使用的包引用来减轻开发人员的维护负担。 它可防止不必要的更新、减少下载和还原时间,并确保更简洁的生成项目。
警告NU1510警告可帮助你主动识别和清理这些引用。
建议的措施
如果项目只针对修剪了包的框架,请完全删除包引用。 对于多目标项目,有条件地仅包含需要它的框架的包引用。 使用以下示例作为指南:
<ItemGroup>
<!-- reference 8.0 System.Text.Json when targeting things older than .NET 8 -->
<PackageReference Include="System.Text.Json" Version="8.0.5" Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))" />
<!-- reference 10.0 System.Linq.AsyncEnumerable when targeting things older than .NET 10 -->
<PackageReference Include="System.Linq.AsyncEnumerable" Version="10.0.0-preview.2.25163.2" Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))" />
<!-- Reference System.Memory on frameworks not compatible with .NET Core 2.1 nor .NETStandard 2.1 -->
<PackageReference Include="System.Memory" Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'netcoreapp2.1')) and !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'netstandard2.1'))" />
</ItemGroup>
受影响的 API
没有。