Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le API seguenti sono obsolete, a partire da .NET 8. La loro chiamata nel codice genera un avviso SYSLIB0050 in fase di compilazione.
- 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)
Soluzione alternativa
Se si usa FormatterServices.GetUninitializedObject(Type), usare invece RuntimeHelpers.GetUninitializedObject(Type) .
Se si esegue la compilazione incrociata per .NET Framework e .NET moderno, è possibile usare un'istruzione
#ifper chiamare in modo selettivo l'API appropriata, come illustrato nel frammento di codice seguente.Type typeToInstantiate; #if NET5_0_OR_GREATER object obj = System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(typeToInstantiate); #else object obj = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeToInstantiate); #endifSe si scrive una libreria di serializzazione, è consigliabile usare librerie di serializzazione che supportano l'infrastruttura di serializzazione legacy (
[Serializable]eISerializable). Le librerie di serializzazione moderne devono avere criteri basati sulle API pubbliche di un tipo anziché sui dettagli dell'implementazione privata. Se si basa un serializzatore su questi dettagli di implementazione e lo si associa saldamente aISerializablee ad altri meccanismi che incoraggiano l'incorporamento dei nomi dei tipi all'interno del payload serializzato, questo può causare i problemi descritti in Rischi di deserializzazione nell'uso di BinaryFormatter e dei tipi correlati.Se la libreria di serializzazione deve rimanere compatibile con l'infrastruttura di serializzazione legacy, è possibile eliminare facilmente l'API di serializzazione legacy obsoleta.
Eliminare un avviso
Se è necessario usare le API obsolete, è possibile eliminare l'avviso nel codice o nel file di progetto.
Per eliminare solo una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare l'avviso.
// Disable the warning.
#pragma warning disable SYSLIB0050
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0050
Per eliminare tutti gli avvisi SYSLIB0050 nel progetto, aggiungere una proprietà <NoWarn> al file di progetto.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
</PropertyGroup>
</Project>
Per altre informazioni, vedere Non visualizzare gli avvisi.