Características obsoletas en .NET 5+

A partir de .NET 5, algunas API recién marcadas como obsoletas usan dos nuevas propiedades en ObsoleteAttribute.

  • La propiedad ObsoleteAttribute.DiagnosticId indica al compilador que genere advertencias de compilación mediante un identificador de diagnóstico personalizado. El identificador personalizado permite que las advertencias de obsolescencia se supriman específicamente y de forma independiente entre sí. En el caso de las obsolescencias de .NET 5+, el formato del identificador de diagnóstico personalizado es SYSLIB0XXX.

  • La propiedad ObsoleteAttribute.UrlFormat indica al compilador que incluya un vínculo de dirección URL para obtener más información sobre la obsolescencia.

Si se producen advertencias o errores de compilación debido al uso de una API obsoleta, siga las instrucciones específicas proporcionadas para el identificador de diagnóstico en la sección Referencia. Las advertencias o los errores de estas obsolescencias no pueden suprimirse mediante el identificador de diagnóstico estándar (CS0618) para tipos o miembros obsoletos; use los valores del identificador de diagnóstico SYSLIB0XXX personalizado en su lugar. Para obtener más información, vea Suprimir advertencias.

Referencia

En la tabla siguiente se proporciona un índice de las obsolescencias SYSLIB0XXX en .NET 5+.

Id. de diagnóstico Advertencia o error Descripción
SYSLIB0001 Advertencia La codificación UTF-7 no es segura y no debe usarse. Considere la posibilidad de usar UTF-8 en su lugar.
SYSLIB0002 Error El entorno de ejecución no respeta PrincipalPermissionAttribute y no debe usarse.
SYSLIB0003 Advertencia La seguridad de acceso del código (CAS) no es compatible o el entorno de ejecución no la respeta.
SYSLIB0004 Advertencia No se admite la característica de regiones de ejecución restringidas (CER).
SYSLIB0005 Advertencia No se admite la caché global de ensamblados (GAC).
SYSLIB0006 Advertencia Thread.Abort() no se admite y produce una PlatformNotSupportedException.
SYSLIB0007 Advertencia La implementación predeterminada de este algoritmo de criptografía no es compatible.
SYSLIB0008 Advertencia La API CreatePdbGenerator() no se admite y produce una PlatformNotSupportedException.
SYSLIB0009 Advertencia No se admite AuthenticationManager. Los métodos no funcionarán ni producirán PlatformNotSupportedException.
SYSLIB0010 Advertencia No se admiten algunas API de comunicación remota y producen una PlatformNotSupportedException.
SYSLIB0011 Advertencia La serialización BinaryFormatter está obsoleta y no debe usarse.
SYSLIB0012 Advertencia Assembly.CodeBase y Assembly.EscapedCodeBase solo se incluyen para la compatibilidad con .NET Framework. Utilice Assembly.Location en su lugar.
SYSLIB0013 Advertencia Uri.EscapeUriString(String) puede dañar la cadena URI en algunos casos. Considere la posibilidad de usar en su lugar Uri.EscapeDataString(String) para los componentes de cadena de consulta.
SYSLIB0014 Advertencia WebRequest, HttpWebRequest, ServicePoint y WebClient están obsoletos. En su lugar, use HttpClient.
SYSLIB0015 Advertencia DisablePrivateReflectionAttribute no tiene ningún efecto a partir de .NET 6.
SYSLIB0016 Advertencia Para mejorar el rendimiento y reducir las asignaciones, use las sobrecargas Graphics.GetContextInfo que aceptan argumentos.
SYSLIB0017 Advertencia La firma de nombres seguros no se admite y genera la excepción PlatformNotSupportedException.
SYSLIB0018 Advertencia La carga solo con reflexión no se admite y genera la excepción PlatformNotSupportedException.
SYSLIB0019 Advertencia Los miembros System.Runtime.InteropServices.RuntimeEnvironmentSystemConfigurationFile, GetRuntimeInterfaceAsIntPtr(Guid, Guid) y GetRuntimeInterfaceAsObject(Guid, Guid) ya no se admiten y generan una excepción PlatformNotSupportedException.
SYSLIB0020 Advertencia JsonSerializerOptions.IgnoreNullValues está obsoleto. Para pasar por alto los valores NULL al serializar, establezca DefaultIgnoreCondition en JsonIgnoreCondition.WhenWritingNull.
SYSLIB0021 Advertencia Los tipos criptográficos derivados están obsoletos. Use el método Create en el tipo base en su lugar.
SYSLIB0022 Advertencia Los tipos Rijndael y RijndaelManaged están obsoletos. Utilice Aes en su lugar.
SYSLIB0023 Advertencia RNGCryptoServiceProvider está obsoleto. Para generar un número aleatorio, use uno de los métodos estáticos RandomNumberGenerator en su lugar.
SYSLIB0024 Advertencia No se admite la creación y descarga de AppDomains y se produce una excepción.
SYSLIB0025 Advertencia SuppressIldasmAttribute no tiene ningún efecto a partir de .NET 6.
SYSLIB0026 Advertencia X509Certificate y X509Certificate2 son inmutables. Use el constructor adecuado para crear un certificado.
SYSLIB0027 Advertencia PublicKey.Key está obsoleto. Use el método adecuado para obtener la clave pública, como GetRSAPublicKey().
SYSLIB0028 Advertencia X509Certificate2.PrivateKey está obsoleto. Use el método adecuado para obtener la clave privada, como RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2), o el método X509Certificate2.CopyWithPrivateKey(ECDiffieHellman) para crear una nueva instancia con una clave privada.
SYSLIB0029 Advertencia ProduceLegacyHmacValues está obsoleto. Ya no se admite la generación de valores HMAC heredados.
SYSLIB0030 Advertencia HMACSHA1 siempre usa la implementación de algoritmos proporcionada por la plataforma. Use un constructor sin el parámetro useManagedSha1.
SYSLIB0031 Advertencia CryptoConfig.EncodeOID(String) está obsoleto. Use la funcionalidad ASN.1 proporcionada en System.Formats.Asn1.
SYSLIB0032 Advertencia No se admite la recuperación de excepciones de estado de proceso dañado; HandleProcessCorruptedStateExceptionsAttribute se omite.
SYSLIB0033 Advertencia Rfc2898DeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]) está obsoleto y no se admite. En su lugar, use PasswordDeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]).
SYSLIB0034 Advertencia CmsSigner(CspParameters) está obsoleto. En su lugar, use un constructor alternativo.
SYSLIB0035 Advertencia SignerInfo.ComputeCounterSignature() está obsoleto. En su lugar, use la sobrecarga que acepta un objeto CmsSigner.
SYSLIB0036 Advertencia Regex.CompileToAssembly está obsoleto y no se admite. Use RegexGeneratorAttribute en su lugar con el generador de origen de expresiones regulares.
SYSLIB0037 Advertencia Los miembros AssemblyName, HashAlgorithm, ProcessorArchitecture y VersionCompatibility se consideran obsoletos y no se admiten.
SYSLIB0038 Advertencia SerializationFormat.Binary está obsoleto y no debe usarse.
SYSLIB0039 Advertencia Las versiones 1.0 y 1.1 de TLS tienen vulnerabilidades conocidas y no se recomiendan. En su lugar, use una versión de TLS más reciente, o bien SslProtocols.None para aplazar los valores predeterminados del sistema operativo.
SYSLIB0040 Advertencia EncryptionPolicy.NoEncryption y EncryptionPolicy.AllowNoEncryption reducen significativamente la seguridad y no deben usarse en el código de producción.
SYSLIB0041 Advertencia El algoritmo hash predeterminado y los recuentos de iteración en los constructores Rfc2898DeriveBytes están obsoletos y son inseguros. Use un constructor que acepte el algoritmo hash y el número de iteraciones.
SYSLIB0042 Advertencia ToXmlString y FromXmlString no tienen ninguna implementación para los tipos de criptografía de curva elíptica (ECC) y están obsoletos. Use un formato de importación y exportación estándar, como ExportSubjectPublicKeyInfo o ImportSubjectPublicKeyInfo para claves públicas, o bien ExportPkcs8PrivateKey o ImportPkcs8PrivateKey para claves privadas.
SYSLIB0043 Advertencia ECDiffieHellmanPublicKey.ToByteArray() y el constructor asociado no tienen ninguna implementación coherente e interoperable en todas las plataformas. Utilice ECDiffieHellmanPublicKey.ExportSubjectPublicKeyInfo() en su lugar.
SYSLIB0044 Advertencia AssemblyName.CodeBase y AssemblyName.EscapedCodeBase están obsoletos. No se admite su uso para cargar un ensamblado.
SYSLIB0045 Advertencia Los Factory Methods criptográficos que aceptan un nombre de algoritmo están obsoletos. En su lugar, use el Factory Method Create sin parámetros en el tipo de algoritmo.
SYSLIB0046 Advertencia El método ControlledExecution.Run(Action, CancellationToken) podría dañar el proceso y no debe usarse en ningún código de producción.
SYSLIB0047 Advertencia XmlSecureResolver está obsoleto. Use XmlResolver.ThrowingResolver en su lugar al intentar prohibir la resolución de entidades externas XML.
SYSLIB0048 Advertencia RSA.EncryptValue(Byte[]) y RSA.DecryptValue(Byte[]) están obsoletos. Utilice RSA.Encrypt y RSA.Decrypt en su lugar.
SYSLIB0049 Advertencia JsonSerializerOptions.AddContext está obsoleto. Para registrar un JsonSerializerContext, use la propiedad TypeInfoResolver o TypeInfoResolverChain.
SYSLIB0050 Advertencia La serialización basada en formateador está obsoleta y no debe usarse.
SYSLIB0051 Advertencia Las API que admiten la serialización basada en formateador obsoleta están obsoletas. El código de la aplicación no debe llamarlas ni ampliarlas.
SYSLIB0052 Advertencia Las API que admiten mecanismos obsoletos para la extensibilidad Regex están obsoletas.
SYSLIB0053 Advertencia AesGcm debe indicar el tamaño de etiqueta necesario para el cifrado y el descifrado. Use un constructor que acepte el tamaño de etiqueta.

Suprimir advertencias

Se recomienda usar una solución alternativa disponible siempre que sea posible. Pero, si no puede cambiar el código, puede suprimir las advertencias por medio de una directiva #pragma o la opción de configuración del proyecto <NoWarn>. Si debe usar las API obsoletas y el diagnóstico SYSLIB0XXX no se ve como un error, puede suprimir la advertencia en el código o en el archivo del proyecto.

Para suprimir las advertencias en el código:

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Para suprimir las advertencias en un archivo de proyecto:

<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>

Nota

La supresión de advertencias de esta manera solo deshabilita las advertencias de obsolescencia que especifique. No deshabilita ninguna otra advertencia, incluidas las de obsolescencia con otros identificadores de diagnóstico.

Vea también