Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Następujące interfejsy API są przestarzałe, począwszy od platformy .NET 8. Wywołanie ich w kodzie generuje ostrzeżenie SYSLIB0050 w czasie kompilacji.
- 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)
Rozwiązanie
Jeśli używasz polecenia FormatterServices.GetUninitializedObject(Type), użyj polecenia RuntimeHelpers.GetUninitializedObject(Type) zamiast tego.
W przypadku kompilowania krzyżowego dla platformy .NET Framework i nowoczesnej platformy .NET można użyć instrukcji
#if, aby selektywnie wywołać odpowiedni interfejs API, jak pokazano w poniższym fragmencie kodu.Type typeToInstantiate; #if NET5_0_OR_GREATER object obj = System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(typeToInstantiate); #else object obj = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeToInstantiate); #endifJeśli piszesz bibliotekę serializacji, zdecydowanie zalecamy stosowanie bibliotek serializacji obsługujących starszą infrastrukturę serializacji (
[Serializable]iISerializable). Nowoczesne biblioteki serializacji powinny mieć zasady oparte na publicznych interfejsach API typu, a nie na jego prywatnych szczegółach implementacji. W przypadku oparcia serializatora na tych szczegółach implementacji i silnie związane z nim i innych mechanizmów, które zachęcają doISerializableosadzania nazw typów w serializowanym ładunku, może to prowadzić do problemów opisanych w temacie Ryzyko deserializacji w użyciu binaryFormatter i powiązanych typów.Jeśli biblioteka serializacji musi pozostać zgodna ze starszą infrastrukturą serializacji, można łatwo pominąć starsze obsoletions interfejsu API serializacji.
Pomijanie ostrzeżenia
Jeśli musisz używać przestarzałych interfejsów API, możesz pominąć ostrzeżenie w kodzie lub w pliku projektu.
Aby pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć ostrzeżenie.
// Disable the warning.
#pragma warning disable SYSLIB0050
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0050
Aby pominąć wszystkie SYSLIB0050 ostrzeżenia w projekcie, dodaj <NoWarn> właściwość do pliku projektu.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
</PropertyGroup>
</Project>
Aby uzyskać więcej informacji, zobacz Pomijanie ostrzeżeń.