因 NuGet 剪裁的直接引用而引发 NU1510

从 .NET 10 SDK 开始,启用修剪时,NuGet 会针对以下项目引发警告NU1510

  • 目标或多目标 .NET 10 或更高版本。
  • 包括与框架提供的库重叠的直接包引用(即不需要引用)。

已引入的版本

.NET 10

以前的行为

以前,如果包与框架提供的库重叠,.NET SDK 将忽略包的内容。 允许包引用,但对生成输出没有影响。

新行为

从 .NET 10 SDK 开始,如果启用了修剪,并且项目面向 .NET 10 或更高版本,NuGet 会通过引发 NU1510 警告通知你任何不必要的包引用。

注释

稍后在 .NET 10 中进行了相关更改,以便自动从文件中排除.nuspec。 但是,你仍 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

没有。

另请参阅