Globala sammansättningscache-API är föråldrade

.NET Core- och .NET 5- och senare versioner eliminerar begreppet global sammansättningscache (GAC) som fanns i .NET Framework. Därför misslyckas alla .NET Core- och .NET 5+-API:er som hanterar GAC eller utför ingen åtgärd.

För att hjälpa utvecklare att undvika dessa API:er markeras vissa GAC-relaterade API:er som föråldrade och genererar en SYSLIB0005 varning vid kompileringstillfället. Dessa API:er kan tas bort i en framtida version av .NET.

Ändra beskrivning

Följande API:er har markerats som föråldrade.

API (gränssnitt för programmering av applikationer) Markerad som föråldrad i...
Assembly.GlobalAssemblyCache 5.0 RC1

I .NET Framework 2.x – 4.x returnerar egenskapen GlobalAssemblyCache värdet true om den efterfrågade assemblyn lästes in från GAC, och false om den lästes in från en annan plats på disken. I .NET Core 2.x – 3.x returnerar GlobalAssemblyCache alltid false, vilket återspeglar att GAC inte finns i .NET Core.

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

I .NET 5 och senare versioner fortsätter egenskapen GlobalAssemblyCache att alltid returnera false. Egenskapens getter är också markerad som föråldrad för att dock indikera för anropare att de ska sluta komma åt egenskapen. Bibliotek och appar bör inte använda API:et GlobalAssemblyCache för att fastställa körningsbeteendet, eftersom det alltid returneras false i .NET Core- och .NET 5- och senare versioner.

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

Det här är endast en förändring vid kompileringstid. Det finns inga driftförändringar från tidigare versioner av .NET Core.

Orsak till ändring

Den globala sammansättningscachen (GAC) finns inte som ett begrepp i .NET Core- och .NET 5- och senare versioner.

Version lanserad

.NET 5.0

  • Om ditt program frågar egenskapen GlobalAssemblyCache kan du överväga att ta bort anropet. Om du använder GlobalAssemblyCache värdet för att välja mellan en "sammansättning i GAC"-flödet jämfört med en "sammansättning som inte finns i GAC"-flödet vid körning bör du överväga om flödet fortfarande är meningsfullt för ett .NET Core- eller .NET 5+-program.

  • Om du måste fortsätta att använda föråldrade API:er kan du utelämna varningen SYSLIB0005 i koden.

    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.
    

    Du kan också ignorera varningen i projektfilen, vilket inaktiverar varningen för alla källfiler i projektet.

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

    Om du utelämnar SYSLIB0005 inaktiveras endast obsoletionsvarningen GlobalAssemblyCache . Inga andra varningar inaktiveras.

Berörda API:er