As APIs de cache de assembly global estão obsoletas
O .NET Core, o .NET 5 e as versões posteriores eliminam o conceito de GAC (cache de assembly global) que estava presente no .NET Framework. Dessa forma, todas as APIs .NET Core e .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 aviso SYSLIB0005
no tempo de compilação. Essas APIs poderão ser removidas em uma versão futura do .NET.
Descrição das alterações
As APIs a seguir estão marcadas como obsoletas.
API | Marcada como obsoleta em... |
---|---|
Assembly.GlobalAssemblyCache | 5.0 RC1 |
No .NET Framework 2.x - 4.x, a propriedade GlobalAssemblyCache retornará true
se o assembly consultado tiver sido carregado do GAC, e false
se ele tiver sido 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 propriedade GlobalAssemblyCache continua sempre retornando false
. No entanto, o getter de propriedade também é marcado como obsoleto para indicar aos chamadores que eles devem parar de acessar a propriedade. Bibliotecas e aplicativos não devem usar a API GlobalAssemblyCache para fazer determinações sobre o comportamento em tempo de execução, porque ela sempre retornará false
no .NET Core e no .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);
Essa é uma alteração somente de tempo de compilação. Não há nenhuma alteração em tempo de execução das versões anteriores do .NET Core.
Motivo da alteração
O GAC (cache de assembly global) não existe como um conceito no .NET Core e no .NET 5 e versões posteriores.
Versão introduzida
.NET 5.0
Ação recomendada
Se o aplicativo consultar a propriedade GlobalAssemblyCache, considere remover a chamada. Se você usar o valor GlobalAssemblyCache para escolher entre um fluxo de "assembly no GAC" versus um fluxo de "assembly que não está no GAC" em tempo de execução, reconsidere se o fluxo ainda é o ideal para um aplicativo .NET Core ou .NET 5+.
Se você precisar continuar a usar as APIs obsoletas, suprima o aviso
SYSLIB0005
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 desabilita 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>
Suprimir
SYSLIB0005
desabilita apenas o aviso de obsolescência GlobalAssemblyCache. Ela não desabilita nenhum outro aviso.
APIs afetadas
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de