Sdílet prostřednictvím


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í , falsecož 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

  • 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í.

Ovlivněná rozhraní API