Rozhraní API globální mezipaměti sestavení jsou zastaralá.
.NET Core a .NET 5 a novější verze eliminují koncept globální mezipaměti sestavení (GAC), která byla přítomna v rozhraní .NET Framework. Proto všechna rozhraní API .NET Core a .NET 5 nebo novější, která řeší GAC, buď selžou, nebo neprovedou žádnou operaci.
Aby vývojářům pomohli od těchto rozhraní API, označí se některá rozhraní API související s GAC jako zastaralá a vygenerují SYSLIB0005
upozornění v době kompilace. Tato rozhraní API mohou být odebrána v budoucí verzi rozhraní .NET.
Změna popisu
Následující rozhraní API jsou označena zastaralá.
rozhraní API | Označeno jako zastaralé v... |
---|---|
Assembly.GlobalAssemblyCache | 5.0 RC1 |
V rozhraní .NET Framework 2.x – 4.x vrátí GlobalAssemblyCache true
vlastnost, pokud bylo dotazované sestavení načteno z GAC a false
pokud byla načtena z jiného umístění na disku. V .NET Core 2.x - 3.x, GlobalAssemblyCache vždy vrátí , false
což odráží, že GAC neexistuje v .NET Core.
Assembly asm = typeof(object).Assembly;
// Prints 'True' on .NET Framework, 'False' on .NET Core.
Console.WriteLine(asm.GlobalAssemblyCache);
V .NET 5 a novějších verzích GlobalAssemblyCache se tato vlastnost stále vrací false
. Vlastnost getter je však také označena jako zastaralá a označuje volajícím, že by měli ukončit přístup k vlastnosti. Knihovny a aplikace by neměly rozhraní API používat GlobalAssemblyCache k určení chování za běhu, protože se vždy vrací false
v .NET Core a .NET 5 a novějších verzích.
Assembly asm = typeof(object).Assembly;
// Prints 'False' on .NET 5+; also produces warning SYSLIB0005 at compile time.
Console.WriteLine(asm.GlobalAssemblyCache);
Jedná se pouze o změnu v době kompilace. V předchozích verzích .NET Core nedošlo k žádné změně za běhu.
Důvod změny
Globální mezipaměť sestavení (GAC) neexistuje jako koncept v .NET Core a .NET 5 a novějších verzích.
Zavedená verze
.NET 5.0
Doporučená akce
Pokud se vaše aplikace dotazuje na GlobalAssemblyCache vlastnost, zvažte odebrání volání. Pokud použijete GlobalAssemblyCache hodnotu k výběru mezi sestavením v GAC a tokem GAC a "sestavením, které není v GAC" tok za běhu, zvažte, jestli tok stále dává smysl pro aplikaci .NET Core nebo .NET 5+.
Pokud musíte i nadále používat zastaralá rozhraní API, můžete upozornění v kódu potlačit
SYSLIB0005
.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.
Upozornění v souboru projektu můžete také potlačit, což zakáže upozornění pro všechny zdrojové soubory v projektu.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- NoWarn below will suppress SYSLIB0005 project-wide --> <NoWarn>$(NoWarn);SYSLIB0005</NoWarn> </PropertyGroup> </Project>
SYSLIB0005
Potlačení zakáže pouze GlobalAssemblyCache upozornění na obsoletion. Nezakážuje žádná další upozornění.