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.
- Aes.Create(String)
- AsymmetricAlgorithm.Create(String)
- DES.Create(String)
- ECDiffieHellman.Create(String)
- ECDsa.Create(String)
- HashAlgorithm.Create(String)
- KeyedHashAlgorithm.Create(String)
- RandomNumberGenerator.Create(String)
- RC2.Create(String)
- Rijndael.Create(String)
- RSA.Create(String)
- SHA1.Create(String)
- SHA256.Create(String)
- SHA384.Create(String)
- SHA512.Create(String)
- SymmetricAlgorithm.Create(String)
- TripleDES.Create(String)
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.