Avviso NuGet NU1510

Scenario 1

PackageReference System.Text.Json non verrà eliminati. Questo pacchetto è disponibile automaticamente e non deve essere fatto riferimento in modo esplicito. Rimuovere l'elemento PackageReference

Issue

Questo avviso viene generato come risultato dell'eliminazione del grafo delle dipendenze NuGet e indica che un pacchetto altrimenti prunable è stato ripristinato a causa di un'operazione diretta PackageReference. Il pacchetto denominato può essere eliminato se viene rimosso direttamente PackageReference , poiché .NET SDK di destinazione fornisce la stessa versione o successiva di questo assembly.

Questo avviso interessa solo i pacchetti registrati per l'eliminazione tramite la funzionalità PrunePackageReference . Viene generato solo quando l'oggetto PackageReference in questione può essere completamente rimosso dal progetto.

Esempio 1

Quando .NET SDK di destinazione include una versione equivalente, la risoluzione dei conflitti di dipendenza seleziona l'assembly in bundle 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>

Esempio 2

Quando .NET SDK di destinazione include una versione equivalente per più destinazioni del framework, la risoluzione dei conflitti di dipendenza seleziona l'assembly in bundle SDK appropriato per ogni destinazione:

  <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

Rimuovere l'oggetto non necessario PackageReference.

Scenario 2

Microsoft PackageReference. Extensions.Caching.Memory non verrà eliminati. Questo pacchetto è disponibile automaticamente e non deve essere fatto riferimento in modo esplicito. Rimuovere l'elemento PackageReference

Issue

L'elenco dei pacchetti utilizzati per l'eliminazione è determinato dagli elementi diretti FrameworkReference del progetto corrente. FrameworkReference gli elementi sono transitivi. Tuttavia, quando il progetto corrente eredita un riferimento al framework tramite , ProjectReferencel'eliminazione non usa tale riferimento al framework transitivo per rimuovere i pacchetti. Si noti che questo pacchetto verrà rimosso dalla risoluzione dei conflitti in fase di compilazione.

Esempio

In questo esempio, Library.csproj fa riferimento a Microsoft.AspNetCore.App e Consumer.csproj riferimenti Library.csproj. Senza un controllo diretto FrameworkReference in Consumer.csproj, NuGet non è in grado di determinare che il pacchetto è prunable. Di conseguenza, Microsoft.Extensions.Caching.Memory non è considerato prunable nel progetto consumer.

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

Aggiungere direttamente a FrameworkReferenceConsumer.csproj. NuGet può quindi determinare che Microsoft.Extensions.Caching.Memory viene fornito dal framework condiviso. Genera NU1510 per il riferimento al pacchetto diretto non necessario.

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

Solution

Aggiungere la corrispondenza FrameworkReference direttamente al progetto corrente. Rimuovere quindi l'oggetto non necessario PackageReference.

Note

A partire da .NET 10, la PrunePackageReference funzionalità è abilitata per impostazione predefinita per tutti i progetti destinati a .NET 10 o versione successiva. L'avviso viene generato solo quando l'eliminazione si applica a tutte le destinazioni di 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>