Certains packages Microsoft.Extensions inclus dans le framework partagé

Pour réduire la taille de l’application, simplifier les dépendances de package et simplifier la maintenance, .NET 11 inclut neuf bibliothèques Microsoft.Extensions.* dans l’infrastructure partagée de base. Les projets qui référencent explicitement ces packages reçoivent l’avertissement de build NU1510. Vous pouvez résoudre l’avertissement en supprimant le PackageReference. Si vous utilisez encore une ancienne version de ces packages, la mise à niveau vers .NET 11 peut révéler des changements avec rupture de compatibilité introduits entre ces anciennes versions et .NET 11.

Version introduite

.NET 11 Preview 4

Comportement antérieur

Auparavant, les bibliothèques Microsoft.Extensions.* suivantes ne faisaient pas partie de l'infrastructure partagée .NET. (Vous obtenez le framework partagé en utilisant Sdk="Microsoft.NET.Sdk", ou, de manière similaire, en faisant référence à l’un des autres SDK .NET.) Les projets qui en avaient besoin exigeaient des entrées PackageReference explicites, et le processus de génération copiait les assemblies dans le dossier de sortie :

Nouveau comportement

À compter de .NET 11, ces neuf bibliothèques font partie de l’infrastructure partagée de base .NET :

  • Vous n’avez pas besoin d’une PackageReference bibliothèque lorsque vous ciblez net11.0 ou une version ultérieure.
  • Si vous faites explicitement référence à ces packages, vous recevez l’avertissement de génération NU1510.
  • Ces assemblages ne sont plus copiés dans le dossier de sortie.
  • Dans de rares cas, les API supplémentaires de l’ensemble chargé par défaut peuvent entraîner des conflits de noms ou de types. Pour résoudre un conflit, ajoutez des directives plus explicites using , utilisez un alias ou utilisez un nom de type complet.

Type de changement cassant

Ce changement est un changement de comportement.

Raison de la modification

L’inclusion de ces bibliothèques couramment utilisées dans l’infrastructure partagée réduit la taille de l’application, simplifie les dépendances de package et simplifie la maintenance.

Supprimez le PackageReference pour tout paquet concerné :

Pour les projets qui ciblent uniquement net11.0 ou ultérieur, supprimez entièrement PackageReference :

<!-- Remove entries like these from your .csproj when targeting net11.0 only: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." />
<PackageReference Include="Microsoft.Extensions.Options" Version="..." />

Votre code continue de fonctionner sans modification : les API font désormais partie du runtime.

Pour les projets à cibles multiples (par exemple, <TargetFrameworks>net10.0;net11.0</TargetFrameworks>), NU1510 n’est pas généré, car le package est toujours requis pour l’ancien TFM. Aucune action n’est requise : NuGet sélectionne automatiquement l’assembly approprié pour chaque infrastructure cible. Si vous souhaitez être explicite, vous pouvez inclure conditionnellement la référence :

<!-- Keep the reference only for TFMs that don't include it in the shared framework: -->
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="..." Condition="'$(TargetFramework)' != 'net11.0'" />

Résolvez les conflits de noms au moment de la compilation (rares) :

Si vous rencontrez une erreur de compilation, car un nom dans votre code est en conflit avec l’une des API nouvellement incluses, utilisez l’une des approches suivantes :

  • Ajoutez une directive plus spécifique using .
  • Utilisez un using alias.
  • Utilisez un nom de type complet.

Si vous dépendez d’une version antérieure de ces packages :

Pour éviter les échecs d’exécution tels que MissingMethodException ou TypeLoadException, recompilez toutes les bibliothèques ou fichiers binaires dépendants par rapport aux assemblys de référence .NET 11. Si vous ciblez net11.0, supprimez le PackageReference et recompilez. Si vous ciblez des TFM antérieurs ou plusieurs cibles, mettez à jour les références de package pour les cibles autres que net11.0 vers la version actuelle, puis recompilez.

Les changements avec rupture de compatibilité suivants des versions précédentes peuvent se manifester lors de la mise à niveau vers les versions .NET 11 de ces paquets :

Microsoft. Extensions.DependencyInjection.Abstractions

Microsoft.Extensions.Logging.Abstractions

Microsoft.Extensions.Hosting.Abstractions

API affectées

Aucun.