Advertencia de NuGet NU1510

Escenario 1

PackageReference System.Text.Json no se eliminará. Este paquete está disponible automáticamente y no es necesario hacer referencia explícitamente a este paquete. Quitar el elemento PackageReference

Issue

Esta advertencia se genera como resultado de la eliminación del grafo de dependencias de NuGet e indica que se restauró un paquete que se puede eliminar de otro modo debido a un directo PackageReference. El paquete con nombre se puede eliminar si se quita el elemento directo PackageReference , ya que el SDK de .NET de destino proporciona la misma versión o superior de este ensamblado.

Esta advertencia solo afecta a los paquetes registrados para la eliminación a través de la característica PrunePackageReference . Solo se genera cuando el PackageReference elemento en cuestión se puede quitar completamente del proyecto.

Ejemplo 1

Cuando el SDK de .NET de destino incluye una versión equivalente, la resolución de conflictos de dependencias selecciona el ensamblado agrupado por el 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>

Ejemplo 2

Cuando el SDK de .NET de destino incluye una versión equivalente para varios destinos de marco, la resolución de conflictos de dependencias selecciona el ensamblado agrupado del SDK adecuado 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

Quite el elemento innecesario PackageReference.

Escenario 2

Microsoft PackageReference. Extensions.Caching.Memory no se eliminará. Este paquete está disponible automáticamente y no es necesario hacer referencia explícitamente a este paquete. Quitar el elemento PackageReference

Issue

La lista de paquetes usados para la eliminación viene determinada por los elementos directos FrameworkReference del proyecto actual. FrameworkReference los elementos son transitivos. Sin embargo, cuando el proyecto actual hereda una referencia de marco a través de , ProjectReferencela eliminación no usa esa referencia de marco transitiva para quitar paquetes. Tenga en cuenta que la resolución de conflictos en tiempo de compilación quitará este paquete.

Example

En este ejemplo, Library.csproj hace referencia a Microsoft.AspNetCore.App y Consumer.csproj hace referencia a Library.csproj. Sin un elemento directo FrameworkReference en Consumer.csproj, NuGet no puede determinar que el paquete se puede eliminar. Como resultado, Microsoft.Extensions.Caching.Memory no se considera podable en el proyecto de 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>

Agregue directamente FrameworkReference a Consumer.csproj. Después, NuGet puede determinar que el marco compartido proporciona Microsoft.Extensions.Caching.Memory. Genera NU1510 para la referencia de paquete directo innecesaria.

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

Solution

Agregue la coincidencia FrameworkReference directamente al proyecto actual. A continuación, quite el elemento innecesario PackageReference.

Note

A partir de .NET 10, la PrunePackageReference característica está habilitada de forma predeterminada para todos los proyectos que tienen como destino .NET 10 o superior. La advertencia solo se genera cuando la eliminación se aplica a todos los destinos en tiempo de ejecución:

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