Aviso nuget NU1510

Cenário 1

PackageReference System.Text.Json não será podado. Esse pacote está disponível automaticamente e não precisa ser referenciado explicitamente. Remover o item PackageReference

Issue

Esse aviso é gerado como resultado da poda do grafo de dependência do NuGet e indica que um pacote predefinido de outra forma foi restaurado devido a um direct PackageReference. O pacote nomeado poderá ser removido se o direct PackageReference for removido, já que o SDK do .NET de destino fornece a mesma versão ou superior desse assembly.

Esse aviso afeta apenas os pacotes registrados para poda por meio do recurso PrunePackageReference . Ele é gerado quando o PackageReference em questão pode ser completamente removido do projeto.

Exemplo 1

Quando o SDK do .NET de destino inclui uma versão equivalente, a resolução de conflitos de dependência seleciona o assembly agrupado no SDK:

  <PropertyGroup>
    <!-- 'System.Text.Json' is SDK-bundled in 'net10.0' -->
    <TargetFramework>net10.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <!-- The assembly provided by this reference will not be used -->
    <PackageReference Include="System.Text.Json" Version="10.0.0" />
  </ItemGroup>

Exemplo 2

Quando o SDK do .NET de destino inclui uma versão equivalente para vários destinos de estrutura, a resolução de conflitos de dependência seleciona o assembly empacotado em SDK apropriado para cada destino:

  <PropertyGroup>
    <!-- 'System.Text.Json' is SDK-bundled in both TFMs -->
    <TargetFrameworks>net9.0;net10.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <!-- Neither of the assemblies provided by these references will be used -->
    <PackageReference Include="System.Text.Json" Version="10.0.0" Condition="'$(TargetFramework)' == 'net10.0'"/>
    <PackageReference Include="System.Text.Json" Version="9.0.4" Condition="'$(TargetFramework)' == 'net9.0'"/>
  </ItemGroup>

Solution

Remova o desnecessário PackageReference.

Cenário 2

Microsoft PackageReference. Extensions.Caching.Memory não será podado. Esse pacote está disponível automaticamente e não precisa ser referenciado explicitamente. Remover o item PackageReference

Issue

A lista de pacotes usados para a poda é determinada pelos itens diretos FrameworkReference do projeto atual. FrameworkReference os itens são transitivos. No entanto, quando o projeto atual herda uma referência de estrutura por meio de uma ProjectReference, a poda não usa essa referência de estrutura transitiva para remover pacotes. Observe que esse pacote será removido pela resolução de conflitos em tempo de build.

Example

Neste exemplo, Library.csproj referencia Microsoft.AspNetCore.App e referências Consumer.csprojLibrary.csproj. Sem uma entrada Consumer.csprojdiretaFrameworkReference, o NuGet não pode determinar se o pacote é podável. Como resultado, Microsoft.Extensions.Caching.Memory não é considerado podável no projeto do consumidor.

  <!-- Library.csproj -->
  <Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
      <TargetFramework>net10.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <FrameworkReference Include="Microsoft.AspNetCore.App" />
    </ItemGroup>
  </Project>
  <!-- Consumer.csproj -->
  <Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
      <TargetFramework>net10.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <ProjectReference Include="..\Library\Library.csproj" />
      <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
    </ItemGroup>
  </Project>

Adicione o FrameworkReference diretamente a Consumer.csproj. O NuGet pode determinar que Microsoft.Extensions.Caching.Memory é fornecido pela estrutura compartilhada. Ele gera NU1510 para a referência desnecessária do pacote direto.

  <ItemGroup>
    <ProjectReference Include="..\Library\Library.csproj" />
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0" />
  </ItemGroup>

Solution

Adicione a correspondência FrameworkReference diretamente ao projeto atual. Em seguida, remova o desnecessário PackageReference.

Note

A partir do .NET 10, o PrunePackageReference recurso é habilitado por padrão para todos os projetos destinados ao .NET 10 ou superior. O aviso só é gerado quando a poda se aplica a todos os destinos de runtime:

  <PropertyGroup>
    <!-- 'System.Text.Json' is not SDK-bundled in 'net48' -->
    <TargetFrameworks>net10.0;net48</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <!-- This reference is needed in 'net48' - NU1510 is not raised -->
    <PackageReference Include="System.Text.Json" Version="9.0.7" />
  </ItemGroup>