Fonctionnalités obsolètes dans .NET 5+

À compter de .NET 5, certaines API qui sont récemment marquées comme obsolètes utilisent deux nouvelles propriétés sur ObsoleteAttribute.

  • La propriété ObsoleteAttribute.DiagnosticId indique au compilateur de générer des avertissements de build à l’aide d’un ID de diagnostic personnalisé. L’ID personnalisé permet de supprimer l’avertissement d’obsolescence de manière spécifique et distincte les uns des autres. Dans le cas des obsolescences .NET 5+, le format de l’ID de diagnostic personnalisé est SYSLIB0XXX.

  • La propriété ObsoleteAttribute.UrlFormat indique au compilateur d’inclure un lien d’URL pour en savoir plus sur l’obsolescence.

Si vous recevez des avertissements ou rencontrez des erreurs de build en raison de l’utilisation d'une API obsolète, suivez les conseils spécifiques fournis pour l’ID de diagnostic répertorié dans la section Référence. Les avertissements ou les erreurs liés à ces obsolescences ne peuvent pas être supprimés à l’aide de l’ID (CS0618) de diagnostic standard pour les types ou membres obsolètes ; utilisez plutôt la valeur d’ID de diagnostic SYSLIB0XXX personnalisé. Pour plus d’informations, consultez Supprimer des avertissements.

Informations de référence

Le tableau suivant fournit un index des obsolescences SYSLIB0XXX dans .NET 5+.

ID de diagnostic Avertissement ou erreur Description
SYSLIB0001 Avertissement L’encodage UTF-7 n’est pas sécurisé et ne doit pas être utilisé. Envisagez d’utiliser UTF-8 à la place.
SYSLIB0002 Erreur PrincipalPermissionAttribute n’est pas respecté par le runtime et ne doit pas être utilisé.
SYSLIB0003 Avertissement La sécurité d’accès du code (CAS) n’est pas prise en charge ni respectée par le runtime.
SYSLIB0004 Avertissement La fonctionnalité de région d’exécution contrainte (CER) n’est pas prise en charge.
SYSLIB0005 Avertissement Le Global Assembly Cache (GAC) n’est pas pris en charge.
SYSLIB0006 Avertissement Thread.Abort() n’est pas pris en charge et lève PlatformNotSupportedException.
SYSLIB0007 Avertissement L’implémentation par défaut de cet algorithme de chiffrement n’est pas prise en charge.
SYSLIB0008 Avertissement L’API CreatePdbGenerator() n’est pas prise en charge et lève PlatformNotSupportedException.
SYSLIB0009 Avertissement La fonction AuthenticationManager n'est pas prise en charge. Méthodes qui lèvent une PlatformNotSupportedException ou n’ont aucune opération.
SYSLIB0010 Avertissement Certaines API de communication à distance ne sont pas prises en charge et lèvent PlatformNotSupportedException.
SYSLIB0011 Avertissement La sérialisation BinaryFormatter est obsolète et ne doit pas être utilisée.
SYSLIB0012 Avertissement Assembly.CodeBase et Assembly.EscapedCodeBase sont uniquement inclus pour la compatibilité .NET Framework. Utilisez Assembly.Location à la place.
SYSLIB0013 Avertissement Uri.EscapeUriString(String) peut endommager la chaîne d’URI dans certains cas. Envisagez plutôt d’utiliser Uri.EscapeDataString(String) pour les composants de chaîne de requête.
SYSLIB0014 Avertissement WebRequest, HttpWebRequest, ServicePoint et WebClient sont obsolètes. Utilisez HttpClient à la place.
SYSLIB0015 Avertissement DisablePrivateReflectionAttribute n’a aucun effet dans .NET 6+.
SYSLIB0016 Avertissement Utilisez les surcharges Graphics.GetContextInfo qui acceptent des arguments pour améliorer les performances et réduire les allocations.
SYSLIB0017 Avertissement La signature de nom fort n’est pas prise en charge et lève PlatformNotSupportedException.
SYSLIB0018 Avertissement Le chargement par réflexion uniquement n’est pas pris en charge et lève PlatformNotSupportedException.
SYSLIB0019 Avertissement Les membres System.Runtime.InteropServices.RuntimeEnvironmentSystemConfigurationFile, GetRuntimeInterfaceAsIntPtr(Guid, Guid) et GetRuntimeInterfaceAsObject(Guid, Guid) ne sont plus pris en charge et lèvent PlatformNotSupportedException.
SYSLIB0020 Avertissement JsonSerializerOptions.IgnoreNullValues est obsolète. Pour ignorer les valeurs Null lors de la sérialisation, définissez DefaultIgnoreCondition sur JsonIgnoreCondition.WhenWritingNull.
SYSLIB0021 Avertissement Les types de chiffrement dérivés sont obsolètes. Utilisez plutôt la méthode Create sur le type de base.
SYSLIB0022 Avertissement Les types Rijndael et RijndaelManaged sont obsolètes. Utilisez Aes à la place.
SYSLIB0023 Avertissement RNGCryptoServiceProvider est obsolète. Pour générer un nombre aléatoire, utilisez l’une des méthodes statiques RandomNumberGenerator à la place.
SYSLIB0024 Avertissement La création et le déchargement d’AppDomains ne sont pas pris en charge et lèvent une exception.
SYSLIB0025 Avertissement SuppressIldasmAttribute n’a aucun effet dans .NET 6+.
SYSLIB0026 Avertissement X509Certificate et X509Certificate2 sont immuables. Utilisez le constructeur approprié pour créer un certificat.
SYSLIB0027 Avertissement PublicKey.Key est obsolète. Utilisez la méthode appropriée pour obtenir la clé publique, comme GetRSAPublicKey().
SYSLIB0028 Avertissement X509Certificate2.PrivateKey est obsolète. Utilisez la méthode appropriée pour obtenir la clé privée, comme RSACertificateExtensions.GetRSAPrivateKey(X509Certificate2), ou utilisez la méthode X509Certificate2.CopyWithPrivateKey(ECDiffieHellman) pour créer une instance avec une clé privée.
SYSLIB0029 Avertissement ProduceLegacyHmacValues est obsolète. La production de valeurs HMAC héritées n’est plus prise en charge.
SYSLIB0030 Avertissement HMACSHA1 utilise toujours l’implémentation d’algorithme fournie par la plateforme. Utilisez un constructeur sans le paramètre useManagedSha1.
SYSLIB0031 Avertissement CryptoConfig.EncodeOID(String) est obsolète. Utilisez la fonctionnalité ASN.1 fournie dans System.Formats.Asn1.
SYSLIB0032 Avertissement La récupération à partir d’exceptions d’état de processus endommagés n’est pas prise en charge ; HandleProcessCorruptedStateExceptionsAttribute est ignoré.
SYSLIB0033 Avertissement Rfc2898DeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]) est obsolète et n’est pas pris en charge. Utilisez PasswordDeriveBytes.CryptDeriveKey(String, String, Int32, Byte[]) à la place.
SYSLIB0034 Avertissement CmsSigner(CspParameters) est obsolète. Utilisez un autre constructeur à la place.
SYSLIB0035 Avertissement SignerInfo.ComputeCounterSignature() est obsolète. Utilisez plutôt la surcharge qui accepte un CmsSigner.
SYSLIB0036 Avertissement Regex.CompileToAssembly est obsolète et non pris en charge. Utilisez plutôt RegexGeneratorAttribute avec le générateur source d’expression régulière.
SYSLIB0037 Avertissement Les membres HashAlgorithm, ProcessorArchitecture et VersionCompatibility de AssemblyName sont obsolètes et non pris en charge.
SYSLIB0038 Avertissement La méthode SerializationFormat.Binary est obsolète et ne doit pas être utilisée.
SYSLIB0039 Avertissement Les versions TLS 1.0 et 1.1 présentent des vulnérabilités connues et ne sont pas recommandées. Utilisez une version TLS plus récente à la place, ou SslProtocols.None pour vous reporter aux valeurs par défaut du système d’exploitation.
SYSLIB0040 Avertissement EncryptionPolicy.NoEncryption et EncryptionPolicy.AllowNoEncryption réduisent considérablement la sécurité et ne doivent pas être utilisés dans le code de production.
SYSLIB0041 Avertissement L’algorithme de hachage par défaut et le nombre d’itérations dans les constructeurs Rfc2898DeriveBytes sont obsolètes et non sécurisés. Utilisez un constructeur qui accepte l’algorithme de hachage et le nombre d’itérations.
SYSLIB0042 Avertissement ToXmlString et FromXmlString n’ont pas d’implémentation pour les types de chiffrement de courbe elliptique (ECC) et sont obsolètes. Utilisez un format d’importation et d’exportation standard comme ExportSubjectPublicKeyInfo ou ImportSubjectPublicKeyInfo pour les clés publiques, et ExportPkcs8PrivateKey ou ImportPkcs8PrivateKey pour les clés privées.
SYSLIB0043 Avertissement ECDiffieHellmanPublicKey.ToByteArray() et le constructeur associé n’ont pas d’implémentation cohérente et interopérable sur toutes les plateformes. Utilisez ECDiffieHellmanPublicKey.ExportSubjectPublicKeyInfo() à la place.
SYSLIB0044 Avertissement AssemblyName.CodeBase et AssemblyName.EscapedCodeBase sont obsolètes. Leur utilisation pour le chargement d’un assembly n’est pas prise en charge.
SYSLIB0045 Avertissement Les méthodes de fabrique de chiffrement qui acceptent un nom d’algorithme sont obsolètes. Utilisez plutôt la méthode de fabrique Create sans paramètre sur le type d’algorithme.
SYSLIB0046 Avertissement La méthode ControlledExecution.Run(Action, CancellationToken) peut endommager le processus et ne doit pas être utilisée dans le code de production.
SYSLIB0047 Avertissement XmlSecureResolver est obsolète. Utilisez plutôt XmlResolver.ThrowingResolver lorsque vous tentez d’interdire la résolution d’entités externes XML.
SYSLIB0048 Avertissement RSA.EncryptValue(Byte[]) et RSA.DecryptValue(Byte[]) sont obsolètes. Utilisez plutôt RSA.Encrypt et RSA.Decrypt.
SYSLIB0049 Avertissement JsonSerializerOptions.AddContext est obsolète. Pour inscrire un JsonSerializerContext, utilisez la propriété TypeInfoResolver ou TypeInfoResolverChain.
SYSLIB0050 Avertissement La sérialisation basée sur un formateur est obsolète et ne doit pas être utilisée.
SYSLIB0051 Avertissement Les API qui prennent en charge la sérialisation obsolète basée sur le formateur sont obsolètes. Elles ne doivent pas être appelées ou étendues par le code de l’application.
SYSLIB0052 Avertissement Les API qui prennent en charge des mécanismes obsolètes pour l’extensibilité Regex sont obsolètes.
SYSLIB0053 Avertissement AesGcm doit indiquer la taille de balise requise pour le chiffrement et le déchiffrement. Utilisez un constructeur qui accepte la taille de balise.

Supprimer les avertissements

Nous vous recommandons d’utiliser une solution de contournement disponible dans la mesure du possible. Toutefois, si vous ne pouvez pas modifier votre code, vous pouvez supprimer les avertissements via une directive #pragma ou un paramètre de projet <NoWarn>. Si vous devez utiliser les API obsolètes et que le diagnostic SYSLIB0XXX ne s’affiche pas comme une erreur, vous pouvez supprimer l’avertissement dans le code ou dans votre Fichier projet.

Pour supprimer les avertissements dans le code :

// Disable the warning.
#pragma warning disable SYSLIB0001

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

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

Pour supprimer les avertissements dans un fichier projet :

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

Notes

La suppression des avertissements de cette façon désactive uniquement les avertissements d’obsolescence que vous avez spécifiés. Cela ne désactive pas les autres avertissements, y compris les avertissements d’obsolescence avec des ID de diagnostic différents.

Voir aussi