SYSLIB0050: Biçimlendirici tabanlı serileştirme kullanımdan kaldırıldı
.NET 8'den başlayarak aşağıdaki API'ler kullanımdan kaldırılmış durumdadır. Bunları kodda çağırmak, derleme zamanında uyarı SYSLIB0050
oluşturur.
- 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)
Geçici çözüm
kullanıyorsanız FormatterServices.GetUninitializedObject(Type)kullanın RuntimeHelpers.GetUninitializedObject(Type) .
.NET Framework ve modern .NET için çapraz derleme yaparsanız, aşağıdaki kod parçacığında gösterildiği gibi uygun API'yi seçmeli olarak çağırmak için bir
#if
deyimi kullanabilirsiniz.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
Serileştirme kitaplığı yazıyorsanız, eski serileştirme altyapısını (
[Serializable]
veISerializable
) destekleyen serileştirme kitaplıklarına karşı kesinlikle önerilir. Modern serileştirme kitaplıkları, özel uygulama ayrıntıları yerine bir türün genel API'lerini temel alan ilkeye sahip olmalıdır. Seri hale getiriciyi bu uygulama ayrıntılarına dayandırır ve bunuISerializable
ve serileştirilmiş yüke tür adlarını eklemeyi teşvik eden diğer mekanizmalara sıkı bir şekilde bağlarsanız, BinaryFormatter ve ilgili türlerin kullanımında seri durumdan çıkarma risklerinde açıklanan sorunlara yol açabilir.Serileştirme kitaplığınızın eski serileştirme altyapısıyla uyumlu kalması gerekiyorsa, eski serileştirme API'sinin obsolet'lerini kolayca gizleyebilirsiniz .
Uyarıyı gizleme
Eski API'leri kullanmanız gerekiyorsa, uyarıyı kodda veya proje dosyanızda gizleyebilirsiniz.
Yalnızca tek bir ihlali engellemek için, önişlemci yönergelerini kaynak dosyanıza ekleyerek uyarıyı devre dışı bırakın ve sonra yeniden etkinleştirin.
// Disable the warning.
#pragma warning disable SYSLIB0050
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0050
Projenizdeki tüm SYSLIB0050
uyarıları engellemek için proje dosyanıza bir <NoWarn>
özellik ekleyin.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
</PropertyGroup>
</Project>
Daha fazla bilgi için bkz . Uyarıları gizleme.