Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A partir do .NET 11, o set acessório de AsnEncodedData.RawData está obsoleto. Definir esta propriedade no código gera avisos SYSLIB0065 em tempo de compilação.
Motivo da obsolescência
AsnEncodedData representa um objeto codificado em ASN.1. Muitos tipos derivam dela, como X509BasicConstraintsExtension, e armazenam em cache a sua representação decodificada para que o acesso à propriedade não decodifique repetidamente o ASN.1.
Uma vez que RawData não é virtual, ao defini-lo numa instância derivada, isso causa uma discrepância entre o estado descodificado em cache e os novos dados em bruto. O tipo derivado não consegue detetar que os dados brutos mudaram, por isso continua a devolver valores descodificados e obsoletos. Por exemplo:
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
Para manter a coerência entre o estado decodificado e os dados subjacentes, use o construtor do tipo apropriado para decodificar os dados. Considere as instâncias como só de leitura — construa uma nova instância em vez de reutilizar uma existente.
// Instead of setting RawData, use the constructor.
X509BasicConstraintsExtension decoded = new(extension, extension.Critical);
Se precisares de comportamento mutável, usa AsnEncodedData.CopyFrom(AsnEncodedData). O CopyFrom método é virtual, pelo que os tipos derivados podem invalidar o seu estado decodificado quando os dados brutos mudam.
Suprimir um aviso
Se tiveres de usar o setter obsoleto, podes suprimir o aviso no código ou no ficheiro do teu projeto.
Para suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desativar e reativar o aviso.
// Disable the warning.
#pragma warning disable SYSLIB0065
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0065
Para suprimir todos os avisos SYSLIB0065 no seu projeto, adicione a propriedade <NoWarn> ao ficheiro de projeto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0065</NoWarn>
</PropertyGroup>
</Project>
Para obter mais informações, consulte Suprimir avisos.