Bagikan melalui


SYSLIB0050: Serialisasi berbasis formatter sudah usang

API berikut usang, mulai dari .NET 8. Memanggilnya dalam kode menghasilkan peringatan SYSLIB0050 pada waktu kompilasi.

Solusi Sementara

  • Jika Anda menggunakan FormatterServices.GetUninitializedObject(Type), gunakan RuntimeHelpers.GetUninitializedObject(Type) sebagai gantinya.

    Jika Anda mengompilasi silang untuk .NET Framework dan .NET modern, Anda dapat menggunakan #if pernyataan untuk secara selektif memanggil API yang sesuai, seperti yang ditunjukkan dalam cuplikan berikut.

    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
    
  • Jika Anda menulis pustaka serialisasi, kami sangat menyarankan untuk melawan pustaka serialisasi yang mendukung infrastruktur serialisasi warisan ([Serializable] dan ISerializable). Pustaka serialisasi modern harus memiliki kebijakan berdasarkan API publik jenis daripada detail implementasi privatnya. Jika Anda mendasarkan serializer pada detail implementasi ini dan sangat mengikatnya ke ISerializable dan mekanisme lain yang mendorong penyematan nama jenis dalam payload serial, itu dapat menyebabkan masalah yang dijelaskan dalam Risiko deserialisasi dalam penggunaan BinaryFormatter dan jenis terkait.

    Jika pustaka serialisasi Anda harus tetap kompatibel dengan infrastruktur serialisasi warisan, Anda dapat dengan mudah menekan kelalaian API serialisasi warisan.

Menyembunyikan peringatan

Jika Anda harus menggunakan API usang, Anda dapat menekan peringatan dalam kode atau dalam file proyek Anda.

Untuk menekan hanya satu pelanggaran, tambahkan direktif praprosedur ke file sumber Anda untuk menonaktifkan lalu mengaktifkan kembali peringatan.

// Disable the warning.
#pragma warning disable SYSLIB0050

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0050

Untuk menekan semua SYSLIB0050 peringatan dalam proyek Anda, tambahkan <NoWarn> properti ke file proyek Anda.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
  </PropertyGroup>
</Project>

Untuk informasi selengkapnya, lihat Menyembunyikan peringatan.

Lihat juga