Partilhar via


SYSLIB0045: Alguns métodos de fábrica criptográfica estão obsoletos

Os seguintes System.Security.Cryptography métodos são obsoletos, começando no .NET 7. Usá-los no código gera 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 e transmitem CryptoConfig.CreateFromName o resultado para o tipo de retorno.

Esses métodos foram marcados [Obsolete] porque, em aplicativos cortados, eles 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 chamadores, e muitos dos identificadores conhecidos estão associados a tipos que são marcados [Obsolete].

Solução

As chamadas que passam por uma cadeia de caracteres constante devem ser alteradas para o método de fábrica sem parâmetros ou uma chamada forte para criar o tipo apropriado. Por exemplo, uma chamada para Aes.Create("AES") pode ser substituída por um Aes.Create() ou new AesCryptoServiceProvider(). Uma vez que o AesCryptoServiceProvider tipo também está marcado [Obsolete], Aes.Create() é o substituto preferido.

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

Suprimir um aviso

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

Para suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desativar e reativar 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 SYSLIB0045 avisos em seu projeto, adicione uma <NoWarn> propriedade ao seu arquivo de projeto.

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

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