Aviso NuGet NU1510

Cenário 1

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

Issue

Este aviso é apresentado como resultado da poda de grafos de dependência do NuGet, e indica que um pacote de outra forma podável foi restaurado devido a um direto PackageReference. O pacote nomeado pode ser podado se o direto PackageReference for removido, uma vez que o .NET SDK direcionado fornece a mesma versão ou superior deste assembly.

Este aviso afeta apenas pacotes registados para poda através da funcionalidade PrunePackageReference . é levantado quando a PackageReference pessoa em questão pode ser completamente removida do projeto.

Exemplo 1

Quando o SDK .NET alvo inclui uma versão equivalente, a resolução de conflitos de dependência seleciona a assembly incluída 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 .NET direcionado inclui uma versão equivalente para múltiplos alvos de framework, a resolução de conflitos de dependências seleciona a assembly SDK apropriada para cada alvo:

  <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

Remove o desnecessário PackageReference.

Cenário 2

PacoteReferência Microsoft. Extensions.Caching.Memory não será podada. Este pacote está automaticamente disponível e não precisa de ser referido 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 framework através de um ProjectReference, a poda não utiliza essa referência transitiva de framework para remover pacotes. Note que este pacote será removido por resolução de conflitos em tempo de construção.

Example

Neste exemplo, Library.csproj faz referência a Microsoft.AspNetCore.App, e Consumer.csproj faz referência a Library.csproj. Sem uma entrada Consumer.csprojdiretaFrameworkReference, a NuGet não consegue determinar se o pacote é podável. Como resultado, Microsoft.Extensions.Caching.Memory não é considerado podável no projeto de consumo.

  <!-- 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 então determinar que Microsoft.Extensions.Caching.Memory é fornecido pelo framework partilhado. Eleva o NU1510 pela referência direta desnecessária ao pacote.

  <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. Depois, remove o desnecessário PackageReference.

Note

A partir do .NET 10, a PrunePackageReference funcionalidade é ativada por defeito para todos os projetos que têm como objetivo .NET 10 ou superior. O aviso só é ativado quando a poda se aplica a todos os alvos de execução:

  <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>