Udostępnij za pośrednictwem


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.

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ń.