SYSLIB0045: Vissa kryptografiska fabriksmetoder är föråldrade
Följande System.Security.Cryptography
metoder är föråldrade, med början i .NET 7. Om du använder dem i kod genereras en varning SYSLIB0045
vid kompileringstillfället. Var och en av dessa fabriksmetoder accepterar ett strängargument som representerar algoritmnamnet. Dessa metoder anropar CryptoConfig.CreateFromName och omvandlar resultatet till returtypen.
- 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)
Dessa metoder har markerats [Obsolete]
eftersom de i trimmade program kan returneras null
när de inte skulle göra det i icke-trimmade program. I icke-trimmade program överraskar de undantagsbaserade beteendena för dessa metoder ibland anropare, och många av de välkända identifierarna är associerade med typer som själva är markerade [Obsolete]
.
Lösning
Anrop som skickar en konstant sträng bör ändras till antingen den parameterlösa fabriksmetoden eller ett starkt anrop för att skapa lämplig typ. Ett anrop till kan till Aes.Create("AES")
exempel ersättas med antingen Aes.Create()
eller new AesCryptoServiceProvider()
. Eftersom typen AesCryptoServiceProvider också är markerad [Obsolete]
Aes.Create()
, är den föredragna ersättningen.
Anrop som skickar en icke-konstant sträng kan antingen använda sin egen uppslagstabell eller ändras för att anropa CryptoConfig.CreateFromName direkt.
Ignorera en varning
Om du måste använda föråldrade API:er kan du ignorera varningen i koden eller i projektfilen.
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan varningen.
// Disable the warning.
#pragma warning disable SYSLIB0045
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0045
Om du vill ignorera alla SYSLIB0045
varningar i projektet lägger du till en <NoWarn>
egenskap i projektfilen.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0045</NoWarn>
</PropertyGroup>
</Project>
Mer information finns i Utelämna varningar.