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 false
alltid , 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
Rekommenderad åtgärd
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.