SYSLIB0065: AsnEncodedData.RawData setter är föråldrad

Från och med .NET 11 är accessorn för AsnEncodedData.RawDataset föråldrad. Om du anger den här egenskapen i koden genereras en varning SYSLIB0065 vid kompileringstillfället.

Orsak till obsoletion

AsnEncodedData representerar ett ASN.1-kodat objekt. Många typer härleds från den, till exempel X509BasicConstraintsExtensionoch cachelagrar deras avkodade representation så att egenskapsåtkomsten inte avkodar ASN.1 upprepade gånger.

Eftersom RawData är inte virtual, orsakar inställningen på en härledd instans en avvikelse mellan det cachelagrade avkodade tillståndet och de nya rådata. Den härledda typen kan inte identifiera att rådata har ändrats, så den fortsätter att returnera inaktuella avkodade värden. Ett exempel:

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

Använd konstruktorn av lämplig typ för att avkoda data för att upprätthålla samtidigheten mellan det avkodade tillståndet och underliggande data. Behandla instanser som skrivskyddade – konstruera en ny instans i stället för att återanvända en befintlig.

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

Om du behöver ett föränderligt beteende använder du AsnEncodedData.CopyFrom(AsnEncodedData). Metoden CopyFrom är virtual, så härledda typer kan ogiltigförklara sitt avkodade tillstånd när rådata ändras.

Undertryck en varning

Om du måste använda den föråldrade settern kan du utelämna varningen i koden eller i projektfilen.

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och återaktiverar sedan varningen.

// Disable the warning.
#pragma warning disable SYSLIB0065

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

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

Om du vill ignorera alla SYSLIB0065 varningar i projektet lägger du till en <NoWarn> egenskap i projektfilen.

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

Mer information finns i Utelämna varningar.