Compartilhar via


SYSLIB0045: alguns métodos de fábrica criptográficos estão obsoletos

Os métodos System.Security.Cryptography a seguir são obsoletos, começando no .NET 7. Usar esses tipos no código gerará um aviso SYSLIB0045 em tempo de compilação. Cada um desses métodos de fábrica aceita um argumento de cadeia de caracteres que representa o nome do algoritmo. Esses métodos chamam CryptoConfig.CreateFromName e convertem o resultado no tipo de retorno.

Esses métodos foram marcados como [Obsolete] porque, em aplicativos cortados, podem retornar null quando não o fariam em aplicativos não cortados. Além disso, em aplicativos não cortados, os comportamentos baseados em exceção desses métodos ocasionalmente surpreendem os autores da chamada e muitos dos identificadores conhecidos estão associados a tipos também marcados como [Obsolete].

Solução alternativa

Chamadas que passam uma cadeia de caracteres constante devem ser alteradas para o método de fábrica sem parâmetros ou para uma chamada forte para criar o tipo apropriado. Por exemplo, uma chamada para Aes.Create("AES") pode ser substituída por Aes.Create() ou new AesCryptoServiceProvider(). Como o tipo AesCryptoServiceProvider também está marcado como [Obsolete], Aes.Create() é a substituição preferencial.

Chamadas que passam uma cadeia de caracteres não constante podem usar a própria tabela de pesquisa ou ser alteradas para chamar CryptoConfig.CreateFromName diretamente.

Suprimir um aviso

Se for necessário usar as APIs obsoletas, você poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir apenas uma violação única, adicione as diretivas de pré-processador ao arquivo de origem para desabilitar e, em seguida, reabilite o aviso.

// Disable the warning.
#pragma warning disable SYSLIB0045

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0045

Para suprimir todos os avisos SYSLIB0045 no projeto, adicione uma propriedade <NoWarn> ao arquivo de projeto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0045</NoWarn>
  </PropertyGroup>
</Project>

Para obter mais informações, confira Suprimir avisos.