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
Action recommandée
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.