Aracılığıyla paylaş


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.

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] ve ISerializable) 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 bunu ISerializable 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.

Ayrıca bkz.