Compartir a través de


Las interfaces de caché de ensamblaje global están obsoletas

.NET Core y .NET 5 y versiones posteriores eliminan el concepto de caché global de ensamblados (GAC) que estaba presente en .NET Framework. Por lo tanto, todas las API de .NET Core y .NET 5+ que tratan con la GAC producen un error o no realizan ninguna operación.

Para ayudar a alejar a los desarrolladores de estas API, algunas API relacionadas con GAC se marcan como obsoletas y generan una SYSLIB0005 advertencia en tiempo de compilación. Estas API se pueden quitar en una versión futura de .NET.

Descripción del cambio

Las SIGUIENTES API están marcadas como obsoletas.

Interfaz de Programación de Aplicaciones (API) Marcado como obsoleto en...
Assembly.GlobalAssemblyCache 5.0 RC1

En .NET Framework 2.x - 4.x, la GlobalAssemblyCache propiedad devuelve true si el ensamblado consultado se cargó desde la GAC y false si se cargó desde una ubicación diferente en el disco. En .NET Core 2.x - 3.x, siempre GlobalAssemblyCache devuelve false, lo que refleja que la GAC no existe en .NET Core.

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

En .NET 5 y versiones posteriores, la GlobalAssemblyCache propiedad continúa siempre devolviendo false. Pero el captador de propiedad también se ha marcado como obsoleto para indicar a los autores de llamadas que deben dejar de acceder a la propiedad. Las bibliotecas y aplicaciones no deben usar la GlobalAssemblyCache API para realizar determinaciones sobre el comportamiento en tiempo de ejecución, ya que siempre devuelve false en .NET Core y .NET 5 y versiones posteriores.

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

Este es un cambio que solo se realiza durante el tiempo de compilación. No hay ningún cambio en tiempo de ejecución de versiones anteriores de .NET Core.

Motivo del cambio

La caché global de ensamblados (GAC) no existe como concepto en .NET Core y .NET 5 y versiones posteriores.

Versión introducida

.NET 5.0

  • Si tu aplicación consulta la propiedad GlobalAssemblyCache, considera quitar la llamada. Si utiliza el valor GlobalAssemblyCache para elegir entre un flujo de "ensamblado en la GAC" frente a un flujo de "ensamblado fuera de la GAC" en tiempo de ejecución, reconsidere si el flujo sigue teniendo sentido para una aplicación de .NET Core o .NET 5+.

  • Si debe seguir usando las API obsoletas, puede suprimir la advertencia en el código SYSLIB0005.

    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.
    

    También puede suprimir la advertencia en el archivo del proyecto, que deshabilita la advertencia para todos los archivos de origen del proyecto.

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

    Suprimir SYSLIB0005 deshabilita solo la advertencia de caducidad GlobalAssemblyCache. No deshabilita ninguna otra advertencia.

Las APIs afectadas