SYSLIB0065: AsnEncodedData.RawData セッターは廃止されました

.NET 11 以降では、setAsnEncodedData.RawData アクセサーは古くなっています。 コードでこのプロパティを設定すると、コンパイル時に警告 SYSLIB0065 が生成されます。

廃止の理由

AsnEncodedData は ASN.1 でエンコードされたオブジェクトを表します。 多くの型は、 X509BasicConstraintsExtensionなど、そこから派生し、デコードされた表現をキャッシュして、プロパティ アクセスが ASN.1 を繰り返しデコードしないようにします。

RawDatavirtualされないため、派生インスタンスに設定すると、キャッシュされたデコードされた状態と新しい生データの間で不一致が発生します。 派生型は生データが変更されたことを検出できないため、古いデコードされた値が返され続けます。 例えば次が挙げられます。

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>

詳細については、「警告を表示しない」を参照してください。