Partager via


NU1510 est levé pour les références directes élaguées par NuGet

À compter de .NET 10, NuGet déclenche un NU1510 avertissement lorsqu’un projet inclut une référence de package directe qui chevauche une bibliothèque fournie par le framework et n’est pas nécessaire.

Version introduite

.NET 10 Preview 1

Comportement précédent

Auparavant, le Kit de développement logiciel (SDK) .NET ignorait le contenu d’un package s’il se chevauche avec une bibliothèque fournie par le framework. La référence du package a été autorisée, mais n’a aucun effet sur la sortie de build.

Nouveau comportement

NuGet supprime désormais entièrement les références de package inutiles et déclenche un NU1510 avertissement pour vous avertir du problème.

Type de changement cassant

Il s’agit d’une modification incompatible avec la source.

Raison de la modification

Cette modification réduit la charge de maintenance des développeurs en éliminant les références de package inutilisées. Il empêche les mises à jour inutiles, réduit les temps de téléchargement et de restauration, et garantit des artefacts de build plus propres. L’avertissementNU1510 vous permet d’identifier et de nettoyer ces références de manière proactive.

Si votre projet cible uniquement les frameworks où le package est nettoyé, supprimez entièrement la référence du package. Pour les projets multi-ciblage, incluez de manière conditionnelle la référence du package uniquement pour les frameworks qui en ont besoin. Utilisez l’exemple suivant comme guide :

<ItemGroup>
    <!-- reference 8.0 System.Text.Json when targeting things older than .NET 8 -->
    <PackageReference Include="System.Text.Json"  Version="8.0.5" Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))" />

    <!-- reference 10.0 System.Linq.AsyncEnumerable when targeting things older than .NET 10 -->
    <PackageReference Include="System.Linq.AsyncEnumerable"  Version="10.0.0-preview.2.25163.2" Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net.10'))" />

    <!-- Reference System.Memory on frameworks not compatible with .NET Core 2.1 nor .NETStandard 2.1 -->
    <PackageReference Include="System.Memory" Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'netcoreapp2.1')) and !$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'netstandard2.1'))" />
</ItemGroup>

API affectées

Aucun.