NuGet 警告 NU1510

Scenario

不会修剪 PackageReference System.Text.Json。 请考虑从依赖项中删除此包,因为它可能是不必要的。

Issue

System.Text.Json 已指定用于通过 PrunePackageReference 功能进行修剪。 .NET SDK 通常指定要修剪的包列表。 由于 .NET 运行时本身具有程序集的相同或更高版本,因此不需要该包作为直接 PackageReference。

当有问题的 PackageReference 可以完全从项目中删除时,才会引发此警告。

Example 1

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Text.Json" Version="10.0.0" />
  </ItemGroup>

Example 2

  <PropertyGroup>
    <TargetFrameworks>net9.0;net10.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Condition="'$(TargetFramework)' == 'net10.0'" Include="System.Text.Json" Version="10.0.0" />
    <PackageReference Condition="'$(TargetFramework)' == 'net9.0'" Include="System.Text.Json" Version="9.0.0" />
  </ItemGroup>

可以删除包的每个条件PackageReferenceSystem.Text.Json,因为包已包含在为其声明的框架的相应 .NET 运行时版本中。

Example 3

  <PropertyGroup>
    <TargetFrameworks>net9.0;net10.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Condition="'$(TargetFramework)' == 'net9.0'" Include="System.Text.Json" Version="9.0.4" />
  </ItemGroup>

System.Text.Json 位于声明的唯一框架的修剪范围内。

Solution

删除 PackageReference,因为没有必要。

Note

为了方便采用 PrunePackageReference 功能,默认情况下,当项目面向 .NET 10 框架或更高版本时,将引发此警告。

Note

在至少一个框架仍需要包的情况下,不会引发该警告,如 net48 以下示例所示。

  <PropertyGroup>
    <TargetFrameworks>net10.0;net48</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Text.Json" Version="9.0.7" />
  </ItemGroup>