Compartilhar via


Recursos obsoletos no .NET 5+

A partir do .NET 5, algumas APIs recentemente marcadas como obsoletas fazem uso de duas novas propriedades em ObsoleteAttribute.

  • A propriedade ObsoleteAttribute.DiagnosticId informa ao compilador para gerar avisos de compilação usando um ID de diagnóstico personalizado. A ID personalizada permite que o aviso de obsolescência seja suprimido especificamente e separadamente um do outro. No caso de obsoletos do .NET 5+, o formato do ID de diagnóstico personalizado é SYSLIB0XXX.

  • A propriedade ObsoleteAttribute.UrlFormat informa ao compilador para incluir um link de URL para saber mais sobre a obsolescência.

Se você encontrar avisos ou erros de compilação devido ao uso de uma API obsoleta, siga as orientações específicas fornecidas para o ID de diagnóstico listado na seção Referência. Avisos ou erros para essas obsoletas não podem ser suprimidos usando o ID de diagnóstico padrão (CS0618) para tipos ou membros obsoletos; em vez disso, use os valores de ID de diagnóstico SYSLIB0XXX personalizados. Para obter mais informações, consulte Suprimir avisos.

Referência

A tabela a seguir fornece um índice para as obsoletas SYSLIB0XXX no .NET 5+.

ID do diagnóstico Aviso ou erro Descrição
SYSLIB0001 Aviso A codificação UTF-7 não é segura e não deve ser usada. Em vez disso, considere usar a UTF-8.
SYSLIB0002 Erro PrincipalPermissionAttribute não é corroborado pelo runtime e não deve ser usado.
SYSLIB0003 Aviso A CAS (segurança de acesso do código) não tem suporte nem é corroborada pelo runtime.
SYSLIB0004 Aviso Não há suporte para o recurso CER (região de execução restrita).
SYSLIB0005 Aviso Não há suporte para GAC (cache de assembly global).
SYSLIB0006 Aviso Thread.Abort() não é compatível e lança PlatformNotSupportedException.
SYSLIB0007 Aviso Não há suporte para a implementação padrão desse algoritmo de criptografia.
SYSLIB0008 Aviso A API CreatePdbGenerator() não é compatível e lança PlatformNotSupportedException.
SYSLIB0009 Aviso Não há suporte para AuthenticationManager. Os métodos não realizarão nenhuma operação ou lançarão PlatformNotSupportedException.
SYSLIB0010 Aviso Algumas APIs de comunicação remota não são compatíveis e lançam PlatformNotSupportedException.
SYSLIB0011 Aviso A serialização de BinaryFormatter está obsoleta e não deve ser usada.
SYSLIB0012 Aviso Assembly.CodeBase e Assembly.EscapedCodeBase são incluídos apenas para compatibilidade com o .NET Framework. Use Assembly.Location em vez disso.
SYSLIB0013 Aviso Uri.EscapeUriString(String) pode corromper a cadeia de caracteres de URI em alguns casos. Em vez disso, considere usar Uri.EscapeDataString(String) para os componentes da cadeia de caracteres de consulta.
SYSLIB0014 Aviso WebRequest, HttpWebRequest, ServicePoint e WebClient estão obsoletos. Use HttpClient em vez disso.
SYSLIB0015 Aviso DisablePrivateReflectionAttribute não tem efeito no .NET 6+.
SYSLIB0016 Aviso Para melhor desempenho e menos alocações, use as sobrecargas de Graphics.GetContextInfo que aceitam argumentos.
SYSLIB0017 Aviso A assinatura de nome forte não é compatível e lança PlatformNotSupportedException.
SYSLIB0018 Aviso O carregamento somente por reflexão não é compatível e lança PlatformNotSupportedException.
SYSLIB0019 Aviso Os membros de System.Runtime.InteropServices.RuntimeEnvironmentSystemConfigurationFile, GetRuntimeInterfaceAsIntPtr(Guid, Guid) e GetRuntimeInterfaceAsObject(Guid, Guid) – não têm mais suporte e lançam PlatformNotSupportedException.
SYSLIB0020 Aviso JsonSerializerOptions.IgnoreNullValues é obsoleto. Para ignorar valores nulos ao serializar, defina DefaultIgnoreCondition como JsonIgnoreCondition.WhenWritingNull.
SYSLIB0021 Aviso Os tipos criptográficos derivados são obsoletos. Em vez disso, use o método Create no tipo base.
SYSLIB0022 Aviso Os tipos Rijndael e RijndaelManaged estão obsoletos. Use Aes em vez disso.
SYSLIB0023 Aviso RNGCryptoServiceProvider é obsoleto. Para gerar um número aleatório, em vez disso use um dos métodos estáticos de RandomNumberGenerator.
SYSLIB0024 Aviso Criar e descarregar AppDomains não é compatível e lança uma exceção.
SYSLIB0025 Aviso SuppressIldasmAttribute não tem efeito no .NET 6+.
SYSLIB0026 Aviso X509Certificate e X509Certificate2 são imutáveis. Use o construtor apropriado para criar um certificado.
SYSLIB0027 Aviso PublicKey.Key é obsoleto. Use o método apropriado para obter a chave pública, como GetRSAPublicKey().
SYSLIB0028 Aviso X509Certificate2.PrivateKey é obsoleto. Use o método apropriado para obter a chave privada, como RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2), ou use o método X509Certificate2.CopyWithPrivateKey(ECDiffieHellman) para criar uma instância com uma chave privada.
SYSLIB0029 Aviso ProduceLegacyHmacValues é obsoleto. Não há mais suporte para a produção de valores HMAC herdados.
SYSLIB0030 Aviso HMACSHA1 sempre usa a implementação de algoritmos fornecida pela plataforma. Use um construtor sem o parâmetro useManagedSha1.
SYSLIB0031 Aviso CryptoConfig.EncodeOID(String) é obsoleto. Use a funcionalidade ASN.1 fornecida em System.Formats.Asn1.
SYSLIB0032 Aviso Não há suporte para a recuperação de exceções de estado de processo corrompido; HandleProcessCorruptedStateExceptionsAttribute é ignorado.
SYSLIB0033 Aviso Rfc2898DeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]) é obsoleto e não compatível. Use PasswordDeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]) em vez disso.
SYSLIB0034 Aviso CmsSigner(CspParameters) é obsoleto. Em vez disso, use um construtor alternativo.
SYSLIB0035 Aviso SignerInfo.ComputeCounterSignature() é obsoleto. Em vez disso, use a sobrecarga que aceita um CmsSigner.
SYSLIB0036 Aviso Regex.CompileToAssembly é obsoleto e não conta com suporte. Use RegexGeneratorAttribute com o gerador de origem de expressão regular.
SYSLIB0037 Aviso AssemblyName membros HashAlgorithm, ProcessorArchitecture e VersionCompatibility são obsoletos e não são suportados.
SYSLIB0038 Aviso SerializationFormat.Binary está obsoleto e não deve ser usado.
SYSLIB0039 Aviso As versões 1.0 e 1.1 do TLS têm vulnerabilidades conhecidas e não são recomendadas. Use uma versão mais recente do TLS ou use SslProtocols.None para adiar os padrões do sistema operacional.
SYSLIB0040 Aviso EncryptionPolicy.NoEncryption e EncryptionPolicy.AllowNoEncryption reduzem significativamente a segurança e não devem ser usados em código de produção.
SYSLIB0041 Aviso As contagens padrão de algoritmo de hash e iteração em construtores Rfc2898DeriveBytes estão desatualizadas e não são seguras. Use um construtor que aceite o algoritmo de hash e o número de iterações.
SYSLIB0042 Aviso ToXmlString e FromXmlString não têm uma implementação para tipos ECC (criptografia de curva elíptica) e são obsoletos. Use um formato padrão de importação e exportação, como ExportSubjectPublicKeyInfo ou ImportSubjectPublicKeyInfo para chaves públicas e ExportPkcs8PrivateKey ou ImportPkcs8PrivateKey para chaves privadas.
SYSLIB0043 Aviso ECDiffieHellmanPublicKey.ToByteArray() e o construtor associado não têm uma implementação consistente e interoperável em todas as plataformas. Use ECDiffieHellmanPublicKey.ExportSubjectPublicKeyInfo() em vez disso.
SYSLIB0044 Aviso AssemblyName.CodeBase e AssemblyName.EscapedCodeBase estão obsoletos. Não há suporte ao uso deles para carregar um assembly.
SYSLIB0045 Aviso Métodos de fábrica criptográficos que aceitam um nome de algoritmo estão obsoletos. Em vez deles, use o método de fábrica Create sem parâmetros no tipo de algoritmo.
SYSLIB0046 Aviso O método ControlledExecution.Run(Action, CancellationToken) pode corromper o processo e não deve ser usado no código de produção.
SYSLIB0047 Aviso XmlSecureResolver é obsoleto. Use XmlResolver.ThrowingResolver ao tentar proibir a resolução de entidade externa XML.
SYSLIB0048 Aviso RSA.EncryptValue(Byte[]) e RSA.DecryptValue(Byte[]) estão obsoletos. Em vez disso, use RSA.Encrypt e RSA.Decrypt.
SYSLIB0049 Aviso JsonSerializerOptions.AddContext está obsoleto. Para registrar um JsonSerializerContext, use a propriedade TypeInfoResolver ou TypeInfoResolverChain.
SYSLIB0050 Aviso A serialização baseada em formatador está obsoleta e não deve ser usada.
SYSLIB0051 Aviso APIs que dão suporte à serialização baseada em formatador obsoleta são obsoletas. Elas não devem ser chamadas nem estendidas pelo código do aplicativo.
SYSLIB0052 Aviso AS APIs que dão suporte a mecanismos obsoletos para a extensibilidade do regex são obsoletas.
SYSLIB0053 Aviso AesGcm deve indicar o tamanho da marca necessária para criptografia e descriptografia. Use um construtor que aceite o tamanho da marca.
SYSLIB0054 Aviso Thread.VolatileRead e Thread.VolatileWrite estão obsoletos. Em vez disso, use Volatile.Read ou Volatile.Write.
SYSLIB0055 Aviso AdvSimd.ShiftRightLogicalRoundedNarrowingSaturate* métodos com parâmetros assinados estão obsoletos. Use as sobrecargas não assinadas em vez disso.
SYSLIB0056 Aviso Assembly.LoadFrom com uma personalização AssemblyHashAlgorithm é obsoleta. Use sobrecargas sem um AssemblyHashAlgorithm.
SYSLIB0057 Aviso Os construtores X509Certificate2 e X509Certificate para conteúdo binário e de arquivo estão obsoletos.

Suprimir avisos

É recomendável usar uma solução alternativa disponível sempre que possível. No entanto, se você não puder alterar seu código, poderá suprimir os avisos por meio de uma diretiva #pragma ou de uma configuração de projeto <NoWarn>. Se você precisar usar as APIs obsoletas e o diagnóstico SYSLIB0XXX não aparecer como um erro, você poderá suprimir o aviso no código ou no arquivo de projeto.

Para suprimir os avisos no código, faça o seguinte:

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Para suprimir os avisos em um arquivo de projeto, faça o seguinte:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   <TargetFramework>net6.0</TargetFramework>
   <!-- NoWarn below suppresses SYSLIB0001 project-wide -->
   <NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
   <!-- To suppress multiple warnings, you can use multiple NoWarn elements -->
   <NoWarn>$(NoWarn);SYSLIB0002</NoWarn>
   <NoWarn>$(NoWarn);SYSLIB0003</NoWarn>
   <!-- Alternatively, you can suppress multiple warnings by using a semicolon-delimited list -->
   <NoWarn>$(NoWarn);SYSLIB0001;SYSLIB0002;SYSLIB0003</NoWarn>
  </PropertyGroup>
</Project>

Observação

A supressão de avisos dessa maneira desativa apenas os avisos de obsolescência que você especificar. Ele não desabilita nenhum outro aviso, incluindo avisos de obsolescência com diferentes IDs de diagnóstico.

Confira também