Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Следующие API устарели, начиная с .NET 8. При вызове их в коде выдается предупреждение SYSLIB0050 во время компиляции.
- 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)
Обходное решение
Если вы использовали FormatterServices.GetUninitializedObject(Type), используйте RuntimeHelpers.GetUninitializedObject(Type) вместо этого.
При перекрестной компиляции для платформа .NET Framework и современной .NET можно использовать
#ifинструкцию для выборочного вызова соответствующего API, как показано в следующем фрагменте кода.Type typeToInstantiate; #if NET5_0_OR_GREATER object obj = System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(typeToInstantiate); #else object obj = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeToInstantiate); #endifЕсли вы пишете библиотеку сериализации, настоятельно рекомендуется использовать библиотеки сериализации, поддерживающие устаревшую инфраструктуру сериализации (
[Serializable]иISerializable). Современные библиотеки сериализации должны иметь политику на основе общедоступных API типа, а не его частных сведений о реализации. Если сериализатор основывается на этих деталях реализации и строго связываете егоISerializableс другими механизмами, которые поощряют внедрение имен типов в сериализованные полезные данные, это может привести к проблемам, описанным в десериализации рисков использования BinaryFormatter и связанных типов.Если библиотека сериализации должна оставаться совместимой с устаревшей инфраструктурой сериализации, вы можете легко отключить устаревшие обзолы API сериализации.
Отключение предупреждений
Если необходимо использовать устаревшие API, вы можете отключить предупреждение в коде или в файле проекта.
Чтобы отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить предупреждение.
// Disable the warning.
#pragma warning disable SYSLIB0050
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0050
Чтобы отключить все SYSLIB0050 предупреждения в проекте, добавьте <NoWarn> свойство в файл проекта.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
</PropertyGroup>
</Project>
Дополнительные сведения см. в разделе Отключение предупреждений.