Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Vanaf .NET 11 is de set accessor AsnEncodedData.RawData verouderd. Als u deze eigenschap instelt in code, wordt er een waarschuwing SYSLIB0065 gegenereerd tijdens het compileren.
Reden voor afschaffing
AsnEncodedData vertegenwoordigt een ASN.1-gecodeerd object. Veel typen stammen hiervan af, zoals X509BasicConstraintsExtension, en slaan hun gedecodeerde representatie in de cache op, zodat toegang tot eigenschappen ASN.1 niet herhaaldelijk decodeert.
Omdat RawData dit niet virtualhet geval is, veroorzaakt het instellen van een afgeleid exemplaar een discrepantie tussen de gedecodeerde status in de cache en de nieuwe onbewerkte gegevens. Het afgeleide type kan niet detecteren dat de onbewerkte gegevens zijn gewijzigd, zodat verouderde gedecodeerde waarden blijven worden geretourneerd. Voorbeeld:
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
Als u de coherentie tussen de gedecodeerde status en de onderliggende gegevens wilt behouden, gebruikt u de constructor van het juiste type om gegevens te decoderen. Behandel instanties als alleen-lezen—maak een nieuwe instantie in plaats van een bestaande te hergebruiken.
// Instead of setting RawData, use the constructor.
X509BasicConstraintsExtension decoded = new(extension, extension.Critical);
Als u veranderlijk gedrag nodig hebt, gebruikt u AsnEncodedData.CopyFrom(AsnEncodedData). De CopyFrom methode is virtual, zodat afgeleide typen hun gedecodeerde status kunnen ongeldig maken wanneer de onbewerkte gegevens worden gewijzigd.
Een waarschuwing onderdrukken
Als u de verouderde setter moet gebruiken, kunt u de waarschuwing in code of in het projectbestand onderdrukken.
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de waarschuwing uit te schakelen en vervolgens opnieuw in te schakelen.
// Disable the warning.
#pragma warning disable SYSLIB0065
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0065
Als u alle SYSLIB0065 waarschuwingen in uw project wilt onderdrukken, voegt u een <NoWarn> eigenschap toe aan het projectbestand.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0065</NoWarn>
</PropertyGroup>
</Project>
Zie Waarschuwingen onderdrukkenvoor meer informatie.