Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
A partir de .NET 11, el set accesor de AsnEncodedData.RawData está obsoleto. Al establecer esta propiedad en el código, se genera una advertencia SYSLIB0065 en tiempo de compilación.
Motivo de obsolescencia
AsnEncodedData representa un objeto con codificación ASN.1. Muchos tipos derivan de él, como X509BasicConstraintsExtension, y almacenan en caché su representación descodificada para que el acceso a la propiedad no descodifique repetidamente el ASN.1.
Como RawData no es virtual, al establecerlo en una instancia derivada se produce una discrepancia entre el estado decodificado almacenado en caché y los nuevos datos sin procesar. El tipo derivado no puede detectar que los datos sin procesar han cambiado, por lo que continúa devolviendo valores descodificados obsoletos. Por ejemplo:
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
Solución
Para mantener la coherencia entre el estado descodificado y los datos subyacentes, use el constructor del tipo adecuado para descodificar datos. Tratar las instancias como de solo lectura: construya una nueva instancia en lugar de reutilizar una existente.
// Instead of setting RawData, use the constructor.
X509BasicConstraintsExtension decoded = new(extension, extension.Critical);
Si necesita un comportamiento mutable, use AsnEncodedData.CopyFrom(AsnEncodedData). El CopyFrom método es virtual, por lo que los tipos derivados pueden invalidar su estado descodificado cuando cambian los datos sin procesar.
Supresión de una advertencia
Si debe usar el establecedor obsoleto, puede suprimir la advertencia en el código o en el archivo del proyecto.
Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la advertencia.
// Disable the warning.
#pragma warning disable SYSLIB0065
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0065
Para suprimir todas las SYSLIB0065 advertencias del proyecto, agregue una <NoWarn> propiedad al archivo del proyecto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0065</NoWarn>
</PropertyGroup>
</Project>
Para obtener más información, vea Suprimir advertencias.