Les API de Global Assembly Cache sont obsolètes

.NET Core et .NET 5 et versions ultérieures éliminent le concept de Global Assembly Cache (GAC) qui était présent dans .NET Framework. Par conséquent, toutes les API .NET Core et .NET 5+ qui traitent le GAC échouent ou n’effectuent aucune opération.

Pour aider les développeurs à s’éloigner de ces API, certaines API liées au GAC sont marquées comme obsolètes et génèrent un avertissement SYSLIB0005 au moment de la compilation. Ces API peuvent être supprimées dans une version ultérieure de .NET.

Description de la modification

Les API suivantes sont marquées comme obsolètes.

API Marqué comme obsolète dans...
Assembly.GlobalAssemblyCache 5.0 RC1

Dans .NET Framework 2.x - 4.x, la propriété GlobalAssemblyCache retourne true si l’assembly interrogé a été chargé à partir du GAC et false s’il a été chargé à partir d’un autre emplacement sur le disque. Dans .NET Core 2.x - 3.x, le GlobalAssemblyCache retourne toujoursfalse, indiquant que le GAC n’existe pas dans .NET Core.

Assembly asm = typeof(object).Assembly;
// Prints 'True' on .NET Framework, 'False' on .NET Core.
Console.WriteLine(asm.GlobalAssemblyCache);

Dans .NET 5 et versions ultérieures, la propriété GlobalAssemblyCache continue de retourner toujours false. Toutefois, la propriété getter est également marquée comme obsolète pour indiquer aux appelants qu’ils doivent cesser d’accéder à la propriété. Les bibliothèques et les applications ne doivent pas utiliser l’API GlobalAssemblyCache pour déterminer le comportement au moment de l’exécution, car elle retourne toujours false dans .NET Core et .NET 5 et versions ultérieures.

Assembly asm = typeof(object).Assembly;
// Prints 'False' on .NET 5+; also produces warning SYSLIB0005 at compile time.
Console.WriteLine(asm.GlobalAssemblyCache);

Il s’agit d’un changement au moment de la compilation uniquement. Il n’y a aucun changement au moment de l’exécution par rapport aux versions précédentes de .NET Core.

Raison du changement

Le Global Assembly Cache (GAC) n’existe pas en tant que concept dans .NET Core et .NET 5 et versions ultérieures.

Version introduite

.NET 5.0

  • Si votre application interroge la propriété GlobalAssemblyCache, envisagez de supprimer l’appel. Si vous utilisez la valeur GlobalAssemblyCache pour choisir entre un flux « assembly dans le GAC » et un « assembly non dans le GAC » au moment de l’exécution, vérifiez si le flux est toujours pertinent pour une application .NET Core ou .NET 5+.

  • Si vous devez continuer à utiliser les API obsolètes, vous pouvez supprimer l’avertissement SYSLIB0005 dans le code.

    Assembly asm = typeof(object).Assembly;
    #pragma warning disable SYSLIB0005 // Disable the warning.
    // Prints 'False' on .NET 5+.
    Console.WriteLine(asm.GlobalAssemblyCache);
    #pragma warning restore SYSLIB0005 // Re-enable the warning.
    

    Vous pouvez également supprimer l’avertissement dans votre fichier projet, ce qui désactive l’avertissement pour tous les fichiers sources du projet.

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
       <TargetFramework>net5.0</TargetFramework>
       <!-- NoWarn below will suppress SYSLIB0005 project-wide -->
       <NoWarn>$(NoWarn);SYSLIB0005</NoWarn>
      </PropertyGroup>
    </Project>
    

    La suppression SYSLIB0005 désactive uniquement l’avertissement d’obsolescence GlobalAssemblyCache. Cela ne désactive aucun autre avertissement.

API affectées