SYSLIB0045: Niektóre metody fabryki kryptograficznych są przestarzałe
Następujące System.Security.Cryptography
metody są przestarzałe, począwszy od platformy .NET 7. Użycie ich w kodzie generuje ostrzeżenie SYSLIB0045
w czasie kompilacji. Każda z tych metod fabryki akceptuje argument ciągu reprezentujący nazwę algorytmu. Metody te powodują wywołanie CryptoConfig.CreateFromName i rzutowanie wyniku na typ zwracany.
- 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)
Te metody zostały oznaczone [Obsolete]
, ponieważ w przyciętych aplikacjach mogą one zwracać null
, gdy nie będą znajdować się w aplikacjach nieprzyciętych. Ponadto w aplikacjach nieprzyciętych zachowania oparte na wyjątkach tych metod od czasu do czasu zaskakuje wywołujących, a wiele znanych identyfikatorów jest skojarzonych z typami, które same są oznaczone jako [Obsolete]
.
Rozwiązanie
Wywołania, które przekazują ciąg stały, należy zmienić na metodę fabryki bez parametrów lub silne wywołanie w celu utworzenia odpowiedniego typu. Na przykład wywołanie metody można zastąpić Aes.Create("AES")
ciągiem Aes.Create()
lub new AesCryptoServiceProvider()
. AesCryptoServiceProvider Ponieważ typ jest również oznaczony [Obsolete]
, Aes.Create()
jest preferowanym zastąpieniem.
Wywołania, które przekazują ciąg inny niż stały, mogą używać własnej tabeli odnośników lub zostać zmienione w celu bezpośredniego wywołania CryptoConfig.CreateFromName .
Pomijanie ostrzeżenia
Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.
Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.
// Disable the warning.
#pragma warning disable SYSLIB0045
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0045
Aby pominąć wszystkie SYSLIB0045
ostrzeżenia w projekcie, dodaj <NoWarn>
właściwość do pliku projektu.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0045</NoWarn>
</PropertyGroup>
</Project>
Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.