SYSLIB0065: AsnEncodedData.RawData setter ist veraltet

Ab .NET 11 ist der set-Accessor AsnEncodedData.RawData veraltet. Wenn Sie diese Eigenschaft im Code festlegen, wird zur Kompilierungszeit eine Warnung SYSLIB0065 generiert.

Grund für die Obsoleszenz

AsnEncodedData stellt ein ASN.1-codiertes Objekt dar. Viele Typen leiten sich davon ab, beispielsweise X509BasicConstraintsExtension, und speichern ihre decodierte Darstellung zwischen, sodass beim Zugriff auf Eigenschaften die ASN.1-Daten nicht wiederholt decodiert werden müssen.

Da RawData nicht virtual ist, führt das Setzen bei einer abgeleiteten Instanz zu einer Diskrepanz zwischen dem im Cache gespeicherten dekodierten Zustand und den neuen Rohdaten. Der abgeleitete Typ kann nicht erkennen, dass die Rohdaten geändert wurden, sodass weiterhin veraltete decodierte Werte zurückgegeben werden. Beispiel:

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

Workaround

Um die Kohärenz zwischen dem decodierten Zustand und den zugrunde liegenden Daten aufrechtzuerhalten, verwenden Sie den Konstruktor des entsprechenden Typs, um Daten zu decodieren. Behandeln Sie Instanzen als schreibgeschützt– erstellen Sie eine neue Instanz, anstatt eine vorhandene Instanz erneut zu verwenden.

// Instead of setting RawData, use the constructor.
X509BasicConstraintsExtension decoded = new(extension, extension.Critical);

Wenn Sie ein änderbares Verhalten benötigen, verwenden Sie AsnEncodedData.CopyFrom(AsnEncodedData). Die CopyFrom Methode lautet virtual, sodass abgeleitete Typen ihren decodierten Zustand ungültig lassen können, wenn sich die Rohdaten ändern.

Unterdrücken einer Warnung

Wenn Sie den veralteten Setter verwenden müssen, können Sie die Warnung im Code oder in der Projektdatei unterdrücken.

Um nur einen einzelnen Verstoß zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Warnung zu deaktivieren und dann wieder zu aktivieren.

// Disable the warning.
#pragma warning disable SYSLIB0065

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0065

Um alle SYSLIB0065 Warnungen in Ihrem Projekt zu unterdrücken, fügen Sie ihrer Projektdatei eine <NoWarn> Eigenschaft hinzu.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0065</NoWarn>
  </PropertyGroup>
</Project>

Weitere Informationen finden Sie unter Unterdrücken von Warnungen.