Bagikan melalui


API serialisasi BinaryFormatter menghasilkan kesalahan kompilator

Sebagai bagian dari rencana penghentian jangka panjang BinaryFormatter, kami terus memusnahkan BinaryFormatter fungsionalitas dari pustaka kami dan untuk menyapih pengembang dari jenis tersebut. Mulai dari .NET 7, panggilan ke API berikut menghasilkan kesalahan waktu kompilasi di semua jenis proyek C# dan Visual Basic:

Perilaku sebelumnya

Sejak .NET 5, menggunakan metode yang terpengaruh Serialize dan Deserialize menghasilkan peringatan kompilator dengan ID SYSLIB0011. Untuk informasi selengkapnya, lihat Metode serialisasi BinaryFormatter usang dan dilarang di aplikasi ASP.NET (.NET 5).

Exception.SerializeObjectState Menggunakan peristiwa tidak menghasilkan kesalahan.

Perilaku yang baru

Mulai dari .NET 7, menggunakan salah satu API yang terpengaruh dalam kode menghasilkan kesalahan kompilator dengan ID yang sama, SYSLIB0011. Proyek Anda akan terpengaruh jika memenuhi semua kriteria berikut:

  • Ini adalah proyek C# atau Visual Basic.
  • Targetnya net7.0 atau lebih tinggi.
  • Ini secara langsung memanggil salah satu API yang terpengaruh.
  • Ini belum menekan SYSLIB0011 kode peringatan.

Versi yang diperkenalkan

.NET 7

Jenis perubahan yang melanggar

Perubahan ini dapat memengaruhi kompatibilitas sumber.

Alasan untuk berubah

Sebagai bagian dari rencana penghentian jangka panjang BinaryFormatter, kami terus memusnahkan BinaryFormatter fungsionalitas dari pustaka kami dan untuk menyapih pengembang dari jenis tersebut.

Tindakan terbaik adalah bermigrasi jauh dari BinaryFormatter karena kelemahan keamanan dan keandalannya. BinaryFormatter dapat dihapus dari .NET dalam rilis mendatang. Tim pustaka .NET telah mengambil sikap bahwa jenis terbaru seperti System.Half dan System.DateOnly tidak akan kompatibel dengan BinaryFormatter.

Jika Anda harus menekan kesalahan, Anda dapat melakukannya dengan mengikuti panduan dalam artikel kedaluarsa asli. Anda juga dapat menonaktifkan kesalahan di seluruh proyek dengan mengatur properti proyek yang mengonversi kesalahan kembali ke peringatan (agar sesuai dengan perilaku .NET 5/6).

Peringatan

Mengatur properti ini mungkin mengubah perilaku host. Lihat <properti EnableUnsafeBinaryFormatterSerialization>.

<PropertyGroup>
    ...
    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

Catatan

Jika proyek Anda dikompilasi dengan "peringatan sebagai kesalahan" diaktifkan, kompilasi masih akan gagal. (Ini cocok dengan perilaku yang dikirim dalam .NET 5 dan .NET 6 SDK.) Jika demikian, Anda masih perlu menekan SYSLIB0011 peringatan di sumber atau di elemen file <NoWarn> proyek Anda.

<Properti EnableUnsafeBinaryFormatterSerialization>

Properti <EnableUnsafeBinaryFormatterSerialization diperkenalkan di .NET 5. Dengan .NET 7, perilaku sakelar ini telah berubah untuk mengontrol kompilasi dan perilaku run-time host . Arti sakelar ini berbeda berdasarkan jenis proyek, seperti yang dijelaskan dalam tabel berikut.

Jenis proyek Properti diatur ke true Properti diatur ke false Properti dihilangkan
Pustaka/komponenbersama 1 API yang terpengaruh kedaluarsa sebagai peringatan. Kompilasi akan berhasil kecuali Anda mengaktifkan "peringatan sebagai kesalahan" untuk aplikasi Anda atau Anda telah menekan SYSLIB0011 kode peringatan. API yang terpengaruh kedaluwarsa sebagai kesalahan, dan panggilan dari kode Anda ke API tersebut akan gagal pada waktu kompilasi kecuali kesalahan ditekan. (Sama seperti untuk false.)
Aplikasi Blazor dan MAUI2 Panggilan ke BinaryFormatter akan gagal pada waktu proses. Panggilan ke BinaryFormatter akan gagal pada waktu proses. Panggilan ke BinaryFormatter akan gagal pada waktu proses.
Aplikasi ASP.NET API yang terpengaruh kedaluarsa sebagai peringatan. Kompilasi akan berhasil kecuali Anda mengaktifkan "peringatan sebagai kesalahan" untuk aplikasi Anda atau Anda telah menekan SYSLIB0011 kode peringatan. Runtime akan memungkinkan panggilan ke BinaryFormatter, terlepas dari apakah panggilan berasal dari kode Anda atau dari dependensi yang Anda gunakan. API yang terpengaruh kedaluwarsa sebagai kesalahan, dan panggilan dari kode Anda ke API tersebut akan gagal pada waktu kompilasi kecuali kesalahan ditekan. Runtime akan melarang panggilan ke BinaryFormatter, terlepas dari apakah panggilan berasal dari kode Anda atau dari dependensi yang Anda gunakan. (Sama seperti untuk false.)
Aplikasi desktop dan semua jenis aplikasi lainnya API yang terpengaruh kedaluarsa sebagai peringatan. Kompilasi akan berhasil kecuali Anda mengaktifkan "peringatan sebagai kesalahan" untuk aplikasi Anda atau Anda telah menekan SYSLIB0011 kode peringatan. Runtime akan memungkinkan panggilan ke BinaryFormatter, terlepas dari apakah panggilan berasal dari kode Anda atau dari dependensi yang Anda gunakan. API yang terpengaruh kedaluwarsa sebagai kesalahan, dan panggilan dari kode Anda ke API tersebut akan gagal pada waktu kompilasi kecuali kesalahan ditekan. Runtime akan melarang panggilan ke BinaryFormatter, terlepas dari apakah panggilan berasal dari kode Anda atau dari dependensi yang Anda gunakan. API yang terpengaruh kedaluwarsa sebagai kesalahan, dan panggilan dari kode Anda ke API tersebut akan gagal pada waktu kompilasi kecuali kesalahan ditekan. Runtime akan memungkinkan panggilan ke BinaryFormatter, terlepas dari apakah panggilan berasal dari kode Anda atau dari dependensi yang Anda gunakan.

1Kebijakan runtime dikendalikan oleh host aplikasi. Panggilan ke mungkin BinaryFormatter masih gagal pada waktu proses meskipun <EnableUnsafeBinaryFormatterSerialization> diatur ke true dalam file proyek pustaka Anda. Pustaka tidak dapat mengambil alih kebijakan runtime host aplikasi.

2Runtime Blazor dan MAUI melarang panggilan ke BinaryFormatter. Terlepas dari nilai apa pun yang Anda tetapkan untuk <EnableUnsafeBinaryFormatterSerialization>, panggilan akan gagal pada waktu proses. Jangan panggil API ini dari aplikasi Blazor atau MAUI atau dari pustaka yang dimaksudkan untuk digunakan oleh aplikasi Blazor atau MAUI.

API yang Terpengaruh

Lihat juga