Dela via


API:er för global sammansättningscache ä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 Markerad som föråldrad i...
Assembly.GlobalAssemblyCache 5.0 RC1

I .NET Framework 2.x – 4.x GlobalAssemblyCache returnerar true egenskapen om den efterfrågade sammansättningen 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 GlobalAssemblyCache returnerar falsealltid , 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. Egenskaps getter är dock också markerad som föråldrad för att indikera för uppringare att de ska sluta komma åt egenskapen. Bibliotek och appar bör inte använda API:et GlobalAssemblyCache för att fastställa körningsbeteende, 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 en kompileringstidsändring. Det finns ingen körningsändring från tidigare versioner av .NET Core.

Orsak till ändringen

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

Version introducerad

.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