Partilhar via


As APIs de cache de montagem global estão obsoletas

O .NET Core, o .NET 5 e as versões posteriores eliminam o conceito de cache global de assembly (GAC), que estava presente no .NET Framework. Como tal, todas as APIs do .NET Core e do .NET 5+ que lidam com o GAC falham ou não executam nenhuma operação.

Para ajudar a afastar os desenvolvedores dessas APIs, algumas APIs relacionadas ao GAC são marcadas como obsoletas e geram um SYSLIB0005 aviso em tempo de compilação. Essas APIs podem ser removidas em uma versão futura do .NET.

Alterar descrição

As APIs a seguir são marcadas como obsoletas.

API Marcado como obsoleto em...
Assembly.GlobalAssemblyCache 5,0 RC1

No .NET Framework 2.x - 4.x, a GlobalAssemblyCache propriedade retorna true se o assembly consultado foi carregado do GAC e false se foi carregado de um local diferente no disco. No .NET Core 2.x - 3.x, o GlobalAssemblyCache sempre retorna false, refletindo que o GAC não existe no .NET Core.

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

No .NET 5 e versões posteriores, a GlobalAssemblyCache propriedade continua sempre a retornar false. No entanto, o proprietário também é marcado como obsoleto para indicar aos chamadores que eles devem parar de acessar a propriedade. Bibliotecas e aplicações não devem usar a GlobalAssemblyCache API para determinar o comportamento em tempo de execução, pois ela retorna false sempre no .NET Core, .NET 5 e versões posteriores.

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

Esta é uma alteração apenas em tempo de compilação. Não há qualquer alteração em tempo de execução em relação às versões anteriores do .NET Core.

Motivo da mudança

O GAC (cache de assembly global) não existe como conceito no .NET Core e .NET 5 e versões posteriores.

Versão introduzida

.NET 5.0

  • Se o seu aplicativo consultar a GlobalAssemblyCache propriedade, considere remover a chamada. Se usar o valor GlobalAssemblyCache para escolher entre um processo "assembly no GAC" e um processo "não no GAC" em tempo de execução, reconsidere se este processo ainda faz sentido para uma aplicação .NET Core ou .NET 5+.

  • Se você precisar continuar a usar as APIs obsoletas, poderá suprimir o SYSLIB0005 aviso no código.

    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.
    

    Você também pode suprimir o aviso no arquivo de projeto, o que desativa o aviso para todos os arquivos de origem no projeto.

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

    A supressão SYSLIB0005 desativa apenas o GlobalAssemblyCache aviso de obsolescência. Não desativa nenhum outro aviso.

APIs afetadas