Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les API suivantes sont obsolètes, à compter de .NET 8. Leur appel dans le code génère un avertissement SYSLIB0050 au moment de la compilation.
- System.Runtime.Serialization.FormatterConverter
- System.Runtime.Serialization.FormatterServices
- System.Runtime.Serialization.IFormatterConverter
- System.Runtime.Serialization.IObjectReference
- System.Runtime.Serialization.ISafeSerializationData
- System.Runtime.Serialization.ISerializationSurrogate
- System.Runtime.Serialization.ISurrogateSelector
- System.Runtime.Serialization.ObjectIDGenerator
- System.Runtime.Serialization.ObjectManager
- System.Runtime.Serialization.SafeSerializationEventArgs
- System.Runtime.Serialization.SerializationObjectManager
- System.Runtime.Serialization.StreamingContextStates
- System.Runtime.Serialization.SurrogateSelector
- System.Runtime.Serialization.Formatters.FormatterAssemblyStyle
- System.Runtime.Serialization.Formatters.FormatterTypeStyle
- System.Runtime.Serialization.Formatters.IFieldInfo
- System.Runtime.Serialization.Formatters.TypeFilterLevel
- System.Type.IsSerializable
- System.Reflection.FieldAttributes.NotSerialized
- System.Reflection.FieldInfo.IsNotSerialized
- System.Reflection.TypeAttributes.Serializable
- System.Runtime.Serialization.ISerializable.GetObjectData(SerializationInfo, StreamingContext)
- SerializationInfo(Type, IFormatterConverter, Boolean)
- SerializationInfo(Type, IFormatterConverter)
- StreamingContext(StreamingContextStates, Object)
- StreamingContext(StreamingContextStates)
Solution de contournement
Si vous utilisiez FormatterServices.GetUninitializedObject(Type), utilisez plutôt RuntimeHelpers.GetUninitializedObject(Type).
Si vous effectuez une compilation croisée pour .NET Framework et .NET moderne, vous pouvez utiliser une instruction
#ifpour appeler de manière sélective l’API appropriée, comme indiqué dans l’extrait de code suivant.Type typeToInstantiate; #if NET5_0_OR_GREATER object obj = System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(typeToInstantiate); #else object obj = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeToInstantiate); #endifSi vous écrivez une bibliothèque de sérialisation, nous vous recommandons vivement d’éviter les bibliothèques de sérialisation qui prennent en charge l’infrastructure de sérialisation héritée (
[Serializable]etISerializable). Les bibliothèques de sérialisation modernes doivent avoir une stratégie basée sur les API publiques d’un type plutôt que sur ses détails d’implémentation privée. Si vous basez un sérialiseur sur ces détails d’implémentation et que vous le liez fortement àISerializableet à d’autres mécanismes qui encouragent l’incorporation de noms de types dans la charge utile sérialisée, cela peut entraîner les problèmes décrits dans Risques de désérialisation dans l’utilisation de BinaryFormatter et des types associés.Si votre bibliothèque de sérialisation doit rester compatible avec l’infrastructure de sérialisation héritée, vous pouvez facilement supprimer les obsolescences d’API de sérialisation héritées.
Supprimer un avertissement
Si vous devez utiliser les API obsolètes, vous pouvez supprimer l’avertissement dans le code ou dans votre fichier projet.
Pour supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver, puis réactiver l’avertissement.
// Disable the warning.
#pragma warning disable SYSLIB0050
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0050
Pour supprimer tous les avertissements SYSLIB0050 dans votre projet, ajoutez une propriété <NoWarn> à votre fichier projet.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
</PropertyGroup>
</Project>
Pour plus d’informations, consultez Supprimer des avertissements.