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.
BinaryFormatter Penghapusan
Dimulai dengan .NET 9, BinaryFormatter tidak lagi didukung karena risiko keamanannya yang diketahui dan API-nya selalu melemparkan PlatformNotSupportedException untuk semua jenis proyek, termasuk Windows Forms aplikasi. Untuk informasi selengkapnya tentang pose risiko BinaryFormatter dan alasan penghapusannya, lihat BinaryFormatter panduan migrasi.
Dengan BinaryFormatterpenghapusan , diharapkan banyak Windows Forms aplikasi akan terpengaruh, dan Anda harus mengambil tindakan untuk menyelesaikan migrasi Anda ke .NET 9 atau versi yang lebih baru.
Bagaimana BinaryFormatter pengaruhnya Windows Forms
Sebelum .NET 9, Windows Forms digunakan BinaryFormatter untuk menserialisasikan dan mendeserialisasi data untuk skenario seperti clipboard, seret dan letakkan, dan menyimpan atau memuat sumber daya pada waktu desain. Dimulai dengan .NET 9, Windows Forms dan WPF menggunakan subset BinaryFormatter implementasi secara internal untuk skenario ini. Meskipun BinaryFormatterrisiko tidak dapat diatasi dalam serialisasi/deserialisasi tujuan umum, langkah-langkah telah diambil untuk mengurangi risiko dalam kasus penggunaan yang sangat spesifik ini dengan serangkaian jenis yang diketahui. Fall-back ke BinaryFormatter masih diberlakukan untuk jenis yang tidak diketahui atau tidak didukung, yang akan melemparkan pengecualian kecuali langkah-langkah migrasi diambil dalam aplikasi.
Windows Forms dan aplikasi WPF menangani jenis berikut, bersama dengan array dan daftar jenis ini. Sumber daya clipboard, seret dan letakkan, dan waktu desain akan terus berfungsi dengan jenis ini tanpa langkah migrasi apa pun yang diperlukan.
boolbytechardecimaldoubleintsbytefloat- TimeSpan
- DateTime
uintstringnintnuintlongulongshortushort- PointF
- RectangleF
Windows Forms juga mendukung jenis tambahan berikut:
Skenario OLE
Untuk informasi tentang penghapusan efek BinaryFormatter pada skenario OLE seperti clipboard dan drag-and-drop serta panduan migrasi lihat Windows Forms Windows Presentation Foundation BinaryFormatter OLE.
Sumber Daya (ResX)
Perancang Windows Forms
Windows Forms Perancang Di Luar Proses juga menggunakan BinaryFormatter secara internal untuk serialisasi dan deserialisasi ResX.
Jenis dan properti mungkin berpartisipasi dalam serialisasi tanpa Anda sadari karena perilaku standar Perancang Windows Forms . Salah satu cara yang BinaryFormatter digunakan yang mungkin tidak Anda ketahui adalah ketika public properti pada IComponent diperkenalkan dan properti tersebut diisi atau diedit pada waktu desain. Properti tersebut diserialisasikan ke dalam file sumber daya dalam kondisi berikut:
- Properti publik berisi data pada saat Form di Perancang disimpan.
- Properti tersebut tidak bersifat baca-saja.
- Properti tersebut tidak dikaitkan dengan
[DesignerSerializationVisibility(false)]. - Properti tersebut tidak memiliki DefaultValueAttribute.
- Properti tersebut tidak memiliki metode masing-masing
bool ShouldSerialize[PropertyName]yang mengembalikanfalsepada saat proses serialisasi CodeDOM. (Catatan: metode dapat memilikiprivatecakupan.) - Properti tersebut adalah tipe yang tidak memiliki DesignerSerializer
Jika pernyataan ini benar, Perancang menentukan apakah jenis properti tersebut memiliki pengonversi jenis. Jika ya, Perancang menggunakan pengonversi jenis untuk menserialisasikan konten properti. Jika tidak, ini menggunakan untuk menserialisasikan BinaryFormatter konten ke dalam file sumber daya. Windows Forms telah menambahkan penganalisis bersama dengan perbaikan kode untuk membantu membawa kesadaran pada jenis perilaku ini di mana BinaryFormatter serialisasi mungkin terjadi tanpa sepengetahuan pengembang.
Memuat sumber daya selama runtime bahasa umum
Jenis yang sebelumnya telah diserialisasikan ke dalam file sumber daya melalui BinaryFormatter akan terus mendeserialisasi seperti yang diharapkan tanpa perlu BinaryFormatter karena konten file ResX dianggap sebagai data tepercaya. Dalam kasus yang jarang terjadi bahwa deserialisasi tidak dapat terjadi tanpa BinaryFormatter, dapat ditambahkan kembali dengan paket kompatibilitas yang tidak didukung. Lihat BinaryFormatter panduan migrasi: Paket Kompatibilitas untuk detailnya. Perhatikan bahwa langkah tambahan untuk mengatur System.Resources.Extensions.UseBinaryFormatter pengalihan true konteks aplikasi diperlukan untuk digunakan BinaryFormatter untuk sumber daya.
Membuat file sumber daya melalui MSBuild
Saat Anda membuat file sumber daya melalui MSBuild, Anda mungkin mengalami kesalahan MSB3825 . Kesalahan ini menentukan bahwa sumber daya berformat biner Anda mungkin dideserialisasi menggunakan BinaryFormatter selama runtime. Peringatan sedang dihapus dari build yang menargetkan .NET 9 dan yang lebih baru, namun penghapusan belum selesai di semua rilis .NET 9. Peringatan ini hanya perlu diperhatikan saat menargetkan .NET 8 dan versi yang lebih rendah. Seperti yang dinyatakan sebelumnya, sumber daya ini tidak akan deserialisasi menggunakan BinaryFormatter selama runtime di .NET 9 dan versi yang lebih baru. Anda dapat menonaktifkan peringatan dengan mengatur properti GenerateResourceWarnOnBinaryFormatterUse ke false. Dalam kasus yang jarang terjadi deserialisasi tidak dapat terjadi tanpa BinaryFormatter, dapat ditambahkan kembali dengan paket kompatibilitas yang tidak didukung. Untuk informasi selengkapnya, lihat BinaryFormatter panduan migrasi: Paket kompatibilitas. Perhatikan bahwa langkah tambahan untuk mengatur pengalihan konteks aplikasi System.Resources.Extensions.UseBinaryFormatter ke true diperlukan agar BinaryFormatter dapat digunakan untuk sumber daya.
Bermigrasi menjauh dari BinaryFormatter
Jika jenis yang tidak ditangani secara intrinsik selama serialisasi dan deserialisasi digunakan dalam skenario yang terpengaruh, Anda harus mengambil tindakan untuk menyelesaikan migrasi ke .NET 9 atau versi yang lebih baru.
Skenario OLE
Lihat Windows Forms Windows Presentation Foundation BinaryFormatter OLE untuk informasi selengkapnya tentang cara bermigrasi jauh dari dalam skenario seperti clipboard dan seret dan letakkan.
Memuat dan menyimpan sumber daya selama waktu desain
Untuk jenis yang tidak ditangani secara intrinsik selama serialisasi ke dalam sumber daya, seperti dalam kasus Perancang dengan skenario ResX, cara yang ditentukan untuk bermigrasi adalah BinaryFormatter dengan memastikan TypeConverter terdaftar untuk jenis atau properti yang berpartisipasi dalam serialisasi. Dengan cara ini, selama serialisasi dan deserialisasi, TypeConverter digunakan sebagai pengganti di mana BinaryFormatter pernah digunakan. Untuk informasi selengkapnya tentang menerapkan pengonversi jenis, lihat TypeConverter Kelas.
Solusi kompatibilitas (tidak disarankan)
Pengguna .NET 9 yang tidak dapat bermigrasi jauh BinaryFormatter dapat menginstal paket kompatibilitas yang tidak didukung. Untuk informasi selengkapnya, lihat BinaryFormatter panduan migrasi: Paket Kompatibilitas.
Perhatian
BinaryFormatter berbahaya dan tidak disarankan karena membahayakan aplikasi untuk serangan seperti penolakan layanan (DoS), pengungkapan informasi, atau eksekusi kode jarak jauh. Untuk informasi selengkapnya tentang pose risiko BinaryFormatter , lihat Risiko deserialisasi yang digunakan dan BinaryFormatter jenis terkait.
Terbitan
Jika Anda mengalami perilaku tak terduga dengan aplikasi Windows Forms Anda terkait serialisasi BinaryFormatter atau deserialisasi, silakan laporkan masalah tersebut pada github.com/dotnet/winforms dan tunjukkan bahwa masalah ini terkait dengan dihapusnya BinaryFormatter.