SYSLIB0045: 一部の暗号化ファクトリ メソッドは廃止されています
.NET 7 以降、次の System.Security.Cryptography
メソッドは廃止されました。 これらをコードで使用すると、コンパイル時に警告 SYSLIB0045
が生成されます。 これらのファクトリ メソッドはそれぞれ、アルゴリズム名を表す文字列引数を受け取ります。 これらのメソッドでは、CryptoConfig.CreateFromName を呼び出し、結果を戻り値の型にキャストします。
- 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)
これらのメソッドには、[Obsolete]
マークが付けられています。トリミングされたアプリケーションでは、トリミングされていないアプリケーションでは返さない null
を返せるためです。 また、トリミングされていないアプリケーションでは、これらのメソッドの例外ベースの動作が呼び出し元を驚かせることがあります。よく知られている識別子の多くは、それ自体に [Obsolete]
のマークが付いている型に関連付けられています。
回避策
定数文字列を渡す呼び出しは、パラメーターなしのファクトリ メソッドまたは適切な型を作成するための厳密な呼び出しのいずれかに変更する必要があります。 たとえば、Aes.Create("AES")
の呼び出しは Aes.Create()
か new AesCryptoServiceProvider()
に置換できます。 AesCryptoServiceProvider 型には [Obsolete]
のマークも付いているため、Aes.Create()
は優先代替です。
非定数文字列を渡す呼び出しでは、独自の参照テーブルを使用できるか、呼び出し CryptoConfig.CreateFromName に直接変更できます。
警告を抑制する
古い API を使う必要がある場合は、コードまたはプロジェクト ファイルで警告を抑制することができます。
単一の違反だけを抑制するには、ソース ファイルにプリプロセッサ ディレクティブを追加して警告を無効にしてから、再度有効にします。
// Disable the warning.
#pragma warning disable SYSLIB0045
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0045
プロジェクトですべての SYSLIB0045
警告を抑制するには、プロジェクト ファイルに <NoWarn>
プロパティを追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0045</NoWarn>
</PropertyGroup>
</Project>
詳細については、「警告を表示しない」を参照してください。
.NET