Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Serialize dan Deserialize metode pada BinaryFormatter, Formatter, dan IFormatter sekarang usang sebagai peringatan. Selain itu, BinaryFormatter serialisasi dilarang secara default untuk aplikasi ASP.NET.
Nota
Di .NET 7, API yang terkena dampak menjadi tidak digunakan lagi dengan status kesalahan. Untuk informasi selengkapnya, lihat API serialisasi BinaryFormatter menghasilkan kesalahan kompilator.
Ubah deskripsi
Karena kerentanan keamanan dalam BinaryFormatter, metode berikut sekarang usang dan menghasilkan peringatan waktu kompilasi dengan ID SYSLIB0011. Selain itu, di aplikasi ASP.NET Core 5.0 dan yang lebih baru, mereka akan melontarkan pengecualian NotSupportedException, kecuali aplikasi web telah mengaktifkan kembali fungsi BinaryFormatter.
Metode serialisasi berikut juga usang dan menghasilkan peringatan SYSLIB0011, tetapi tidak memiliki perubahan perilaku:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Versi yang diperkenalkan
5.0
Alasan perubahan
Metode ini ditandai usang sebagai bagian dari upaya untuk menurunkan penggunaan BinaryFormatter dalam ekosistem .NET.
Tindakan yang direkomendasikan
Berhenti menggunakan BinaryFormatter dalam kode Anda. Sebagai gantinya, pertimbangkan untuk menggunakan JsonSerializer atau XmlSerializer. Untuk informasi selengkapnya, lihat Panduan keamanan BinaryFormatter.
Anda dapat sementara menekan peringatan waktu kompilasi BinaryFormatter, yaitu
SYSLIB0011. Kami menyarankan agar Anda menilai kode Anda secara menyeluruh untuk risiko sebelum memilih opsi ini. Cara termudah untuk menekan peringatan adalah dengan mengelilingi lokasi pemanggilan individu dengan#pragmapetunjuk.// Now read the purchase order back from disk using (var readStream = new FileStream("myfile.bin", FileMode.Open)) { var formatter = new BinaryFormatter(); #pragma warning disable SYSLIB0011 return (PurchaseOrder)formatter.Deserialize(readStream); #pragma warning restore SYSLIB0011 }Anda juga dapat mengabaikan peringatan dalam file proyek.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>Jika Anda menonaktifkan peringatan dalam file proyek, peringatan tersebut akan disembunyikan untuk semua file kode di proyek tersebut. Penekanan
SYSLIB0011tidak menekan peringatan yang disebabkan oleh penggunaan API usang lainnya.Untuk terus menggunakan BinaryFormatter di aplikasi ASP.NET, Anda dapat mengaktifkannya kembali dalam file proyek. Namun, sangat disarankan untuk tidak melakukan ini. Untuk informasi selengkapnya, lihat Panduan keamanan BinaryFormatter.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Untuk informasi selengkapnya tentang tindakan yang direkomendasikan, lihat Mengatasi kesalahan kedaluarsa dan penonaktifan BinaryFormatter.
API yang terpengaruh
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
- System.Runtime.Serialization.Formatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatter.Deserialize(Stream)
- System.Runtime.Serialization.IFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.IFormatter.Deserialize(Stream)