.NET 11 以降では、setのAsnEncodedData.RawData アクセサーは古くなっています。 コードでこのプロパティを設定すると、コンパイル時に警告 SYSLIB0065 が生成されます。
廃止の理由
AsnEncodedData は ASN.1 でエンコードされたオブジェクトを表します。 多くの型は、 X509BasicConstraintsExtensionなど、そこから派生し、デコードされた表現をキャッシュして、プロパティ アクセスが ASN.1 を繰り返しデコードしないようにします。
RawDataはvirtualされないため、派生インスタンスに設定すると、キャッシュされたデコードされた状態と新しい生データの間で不一致が発生します。 派生型は生データが変更されたことを検出できないため、古いデコードされた値が返され続けます。 例えば次が挙げられます。
X509BasicConstraintsExtension extension = new(
certificateAuthority: true,
hasPathLengthConstraint: true,
pathLengthConstraint: 3,
critical: true);
X509BasicConstraintsExtension decoded = new();
decoded.RawData = extension.RawData;
Console.WriteLine(decoded.CertificateAuthority); // Unexpectedly prints False
Console.WriteLine(decoded.HasPathLengthConstraint); // Unexpectedly prints False
Console.WriteLine(decoded.PathLengthConstraint); // Unexpectedly prints 0
対処法
デコードされた状態と基になるデータの間の一貫性を維持するには、適切な型のコンストラクターを使用してデータをデコードします。 インスタンスを読み取り専用として扱います。既存のインスタンスを再利用するのではなく、新しいインスタンスを構築します。
// Instead of setting RawData, use the constructor.
X509BasicConstraintsExtension decoded = new(extension, extension.Critical);
変更可能な動作が必要な場合は、 AsnEncodedData.CopyFrom(AsnEncodedData)を使用します。
CopyFrom メソッドはvirtualされるため、派生型は生データが変更されたときにデコードされた状態を無効にすることができます。
警告を抑制する
古いセッターを使用する必要がある場合は、コードまたはプロジェクト ファイルで警告を抑制できます。
単一の違反だけを抑制するには、ソース ファイルにプリプロセッサ ディレクティブを追加して警告を無効にしてから、再度有効にします。
// Disable the warning.
#pragma warning disable SYSLIB0065
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0065
プロジェクト内のすべての SYSLIB0065 警告を抑制するには、 <NoWarn> プロパティをプロジェクト ファイルに追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0065</NoWarn>
</PropertyGroup>
</Project>
詳細については、「警告を表示しない」を参照してください。
.NET