Avertissement NuGet NU1510

Scénario 1

PackageReference System.Text.Json ne sera pas supprimé. Ce package est automatiquement disponible et n’a pas besoin d’être référencé explicitement. Supprimer l’élément PackageReference

Issue

Cet avertissement est déclenché suite à l’élagage du graphe des dépendances NuGet et indique qu’un package non runable a été restauré en raison d’une taille directe PackageReference. Le package nommé peut être supprimé si le direct PackageReference est supprimé, car le SDK .NET ciblé fournit la même version ou une version ultérieure de cet assembly.

Cet avertissement affecte uniquement les packages inscrits pour l’élagage via la fonctionnalité PrunePackageReference . Il n’est soulevé que lorsque l’objet PackageReference en question peut être complètement supprimé du projet.

Exemple 1

Lorsque le Kit de développement logiciel (SDK) .NET ciblé inclut une version équivalente, la résolution des conflits de dépendance sélectionne l’assembly groupé 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>

Exemple 2

Lorsque le Kit de développement logiciel (SDK) .NET ciblé inclut une version équivalente pour plusieurs cibles de framework, la résolution des conflits de dépendance sélectionne l’assembly groupé du KIT de développement logiciel (SDK) approprié pour chaque cible :

  <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

Supprimez les éléments inutiles PackageReference.

Scénario 2

PackageReference Microsoft. Extensions.Caching.Memory ne sera pas nettoyé. Ce package est automatiquement disponible et n’a pas besoin d’être référencé explicitement. Supprimer l’élément PackageReference

Issue

La liste des packages utilisés pour la taille est déterminée par les éléments directs FrameworkReference du projet actuel. FrameworkReference les éléments sont transitifs. Toutefois, lorsque le projet actuel hérite d’une référence d’infrastructure par le biais d’un ProjectReference, l’élagage n’utilise pas cette référence de framework transitive pour supprimer des packages. Notez que ce package sera supprimé par la résolution des conflits au moment de la génération.

Exemple

Dans cet exemple, Library.csproj références Microsoft.AspNetCore.App et Consumer.csproj références Library.csproj. Sans entrée Consumer.csprojdirecteFrameworkReference, NuGet ne peut pas déterminer que le package est runable. Par conséquent, Microsoft.Extensions.Caching.Memory n'est pas considéré comme runable dans le projet consommateur.

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

Ajoutez directement à FrameworkReferenceConsumer.csproj. NuGet peut ensuite déterminer que Microsoft.Extensions.Caching.Memory est fourni par l’infrastructure partagée. Il déclenche NU1510 pour la référence inutile du package direct.

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

Solution

Ajoutez la correspondance FrameworkReference directement au projet actuel. Ensuite, supprimez l’inutile PackageReference.

Note

À compter de .NET 10, la PrunePackageReference fonctionnalité est activée par défaut pour tous les projets qui ciblent .NET 10 ou version ultérieure. L’avertissement est déclenché uniquement lorsque la taille s’applique à toutes les cibles d’exécution :

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