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 falsewartość , 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

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

Dotyczy interfejsów API