Interfejsy API globalnej pamięci podręcznej zestawów są przestarzałe
Wersje .NET Core i .NET 5 i nowsze eliminują koncepcję globalnej pamięci podręcznej zestawów (GAC), która była obecna w programie .NET Framework. W związku z tym wszystkie interfejsy API .NET Core i .NET 5+, które zajmują się GAC, kończą się niepowodzeniem lub nie wykonują żadnej operacji.
Aby pomóc deweloperom w odejściu od tych interfejsów API, niektóre interfejsy API związane z GAC są oznaczone jako przestarzałe i generują SYSLIB0005
ostrzeżenie w czasie kompilacji. Te interfejsy API mogą zostać usunięte w przyszłej wersji platformy .NET.
Opis zmiany
Następujące interfejsy API są oznaczone jako przestarzałe.
interfejs API | Oznaczone jako przestarzałe w... |
---|---|
Assembly.GlobalAssemblyCache | 5.0 RC1 |
W programie .NET Framework 2.x — 4.x właściwość zwracatrue
, GlobalAssemblyCache czy zestaw zapytany został załadowany z GAC i false
czy został załadowany z innej lokalizacji na dysku. W programie .NET Core 2.x — 3.x GlobalAssemblyCache zawsze zwraca false
wartość , co odzwierciedla, że funkcja GAC nie istnieje na platformie .NET Core.
Assembly asm = typeof(object).Assembly;
// Prints 'True' on .NET Framework, 'False' on .NET Core.
Console.WriteLine(asm.GlobalAssemblyCache);
W wersjach .NET 5 i nowszych GlobalAssemblyCache właściwość nadal zwraca wartość false
. Jednak obiekt getter właściwości jest również oznaczony jako przestarzały, aby wskazać obiektom wywołującym, że powinni przestać uzyskiwać dostęp do właściwości. Biblioteki i aplikacje nie powinny używać interfejsu GlobalAssemblyCache API do określania zachowania w czasie wykonywania, ponieważ zawsze są zwracane false
w wersjach .NET Core i .NET 5 i nowszych.
Assembly asm = typeof(object).Assembly;
// Prints 'False' on .NET 5+; also produces warning SYSLIB0005 at compile time.
Console.WriteLine(asm.GlobalAssemblyCache);
Jest to zmiana tylko w czasie kompilacji. Nie ma zmian w czasie wykonywania z poprzednich wersji platformy .NET Core.
Przyczyna wprowadzenia zmiany
Globalna pamięć podręczna zestawów (GAC) nie istnieje jako koncepcja w programach .NET Core i .NET 5 i nowszych wersjach.
Wprowadzona wersja
.NET 5.0
Zalecana akcja
Jeśli aplikacja wysyła zapytanie do GlobalAssemblyCache właściwości, rozważ usunięcie wywołania. Jeśli używasz GlobalAssemblyCache wartości do wyboru między "zestawem w GAC"-flow a "zestawem nie w GAC"-flow w czasie wykonywania, rozważ, czy przepływ nadal ma sens dla aplikacji .NET Core lub .NET 5+.
Jeśli nadal musisz używać przestarzałych interfejsów API, możesz pominąć
SYSLIB0005
ostrzeżenie w kodzie.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.
Możesz również pominąć ostrzeżenie w pliku projektu, co powoduje wyłączenie ostrzeżenia dla wszystkich plików źródłowych w projekcie.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- NoWarn below will suppress SYSLIB0005 project-wide --> <NoWarn>$(NoWarn);SYSLIB0005</NoWarn> </PropertyGroup> </Project>
Pomijanie
SYSLIB0005
wyłącza tylko GlobalAssemblyCache ostrzeżenie o obsoletionie. Nie wyłącza żadnych innych ostrzeżeń.