Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
BinaryFormatter Kaldırma
.NET 9'dan başlayarak bilinen BinaryFormatter güvenlik riskleri nedeniyle artık desteklenmemektedir ve API'leri uygulamalar da dahil olmak üzere PlatformNotSupportedException tüm proje türleri için her zaman bir Windows Forms oluşturur. Riskler BinaryFormatter ve kaldırılmasının nedeni hakkında daha fazla bilgi için geçiş kılavuzuna BinaryFormatterbakın.
'nin kaldırılmasıyla BinaryFormatterbirlikte birçok Windows Forms uygulamanın etkilenmesi beklenir ve .NET 9 veya sonraki bir sürüme geçişinizi tamamlamak için işlem yapmanız gerekir.
Nasıl BinaryFormatter etkiler? Windows Forms
.NET 9'un öncesinde, Windows Forms pano, sürükleyip bırakma ve kaynakları tasarım zamanında depolama veya yükleme gibi senaryolarda verileri seri hale getirmek ve seri durumdan çıkarmak için kullanıldı BinaryFormatter. .NET 9 ve WPF ile başlayarak, Windows Forms bu senaryolar için uygulamanın bir alt kümesini BinaryFormatter dahili olarak kullanır. BinaryFormatter'nin riskleri genel amaçlı serileştirme/seri durumdan çıkarmada ele alınamasa da, bilinen bir tür kümesine sahip bu çok özel kullanım örneklerindeki riskleri azaltmak için önlemler alınmıştır. uygulamasına geri dönüş BinaryFormatter , uygulamada geçiş adımları uygulanmadığı sürece özel durumlar oluşturacak olan bilinmeyen veya desteklenmeyen türler için hala geçerlidir.
Windows Forms ve WPF uygulamaları aşağıdaki türlerin yanı sıra bu türlerin dizilerini ve listelerini işler. Pano, sürükleyip bırakma ve tasarım zamanı kaynakları, geçiş adımı gerekmeden bu türlerle çalışmaya devam eder.
boolbytechardecimaldoubleintsbytefloat- TimeSpan
- DateTime
uintstringnintnuintlongulongshortushort- PointF
- RectangleF
Windows Forms ayrıca aşağıdaki ek türleri de destekler:
OLE senaryoları
Kaldırmanın pano ve sürükle ve bırak gibi OLE senaryolarında sahip olduğu etkileri BinaryFormatter hakkında bilgi için bkz Windows Forms . ve Windows Presentation Foundation BinaryFormatter OLE kılavuzu.
Kaynaklar (ResX)
Windows Forms Tasarımcı
İşlem Windows Forms Dışı Tasarımcı, ResX serileştirme ve seri durumdan çıkarma için dahili olarak da kullanır BinaryFormatter .
Türler ve özellikler, tasarımcının standart davranışı nedeniyle siz fark etmeden serileştirmeye Windows Forms katılabilir. Farkında olmayabileceğiniz bir yöntemBinaryFormatter, üzerindeki public bir IComponent özelliğin tanıtılması ve bu özelliğin tasarım zamanında doldurulması veya düzenlenmesidir. Bu özellik aşağıdaki koşullar altında kaynak dosyalarında seri hale getirilir:
- Ortak özellik, Tasarımcı'da bir Form kaydedildiğinde verileri içerir.
- Bu özellik salt okunur değil.
- Bu özellik ile
[DesignerSerializationVisibility(false)]ilişkilendirilmemiştir. - Bu özelliğin bir DefaultValueAttributeyok.
- Bu özelliğin CodeDOM serileştirme işlemi sırasında döndüren
bool ShouldSerialize[PropertyName]ilgilifalsebir yöntemi yoktur. (Not: yöntemin kapsamı olabilirprivate.) - Bu özellik, DesignerSerializer
Bu deyimler true ise, Tasarımcı bu özelliğin türünün bir tür dönüştürücüsü olup olmadığını belirler. Böyle bir durumda Tasarımcı, özellik içeriğini seri hale getirmek için tür dönüştürücüsünü kullanır. Aksi takdirde, içeriği kaynak dosyasında seri hale getirmek için kullanır BinaryFormatter . Windows Forms , geliştiricinin bilgisi olmadan serileştirmenin gerçekleşebileceği bu tür davranışlara BinaryFormatter farkındalık sağlamaya yardımcı olmak için kod düzeltmeleriyle birlikte çözümleyiciler ekledi.
Çalışma zamanı sırasında kaynak yükleme
Aracılığıyla daha önce kaynak dosyalarına seri hale getirilmiş türler, ResX dosyalarının BinaryFormatter içeriği güvenilir veri olarak kabul edildiği için BinaryFormatter gerek kalmadan beklendiği gibi seri durumdan çıkarılmaya devam eder. Seri durumdan çıkarma işlemi olmadan BinaryFormattergerçekleşemediği nadir durumlarda desteklenmeyen bir uyumluluk paketiyle geri eklenebilir. Ayrıntılar için bkz BinaryFormatter . Geçiş kılavuzu: Uyumluluk Paketi . Kaynaklar için kullanmak System.Resources.Extensions.UseBinaryFormatter üzere uygulama bağlam anahtarı true ayarının BinaryFormatter ek bir adımının gerekli olduğunu unutmayın.
MSBuild aracılığıyla kaynak dosyaları oluşturma
MSBuild aracılığıyla kaynak dosyaları oluşturduğunuzda bir MSB3825 hatayla karşılaşabilirsiniz. Bu hata, ikili biçimlendirilmiş kaynaklarınızın çalışma zamanında BinaryFormatter kullanılarak seri durumdan çıkarılabileceğini belirtir. Uyarı .NET 9 ve sonraki sürümleri hedefleyen derlemelerden kaldırılıyor, ancak kaldırma işlemi .NET 9'un tüm sürümlerinde henüz tamamlanmadı. Uyarı yalnızca .NET 8 ve daha düşük bir sürüm hedeflenirken dikkate alınmalıdır. Daha önce belirtildiği gibi, .NET 9 ve sonraki sürümlerde bu kaynaklar çalışma zamanı sırasında BinaryFormatter kullanılarak seri hale getirilemeyecektir. özelliğini GenerateResourceWarnOnBinaryFormatterUsefalseolarak ayarlayarak uyarıyı kapatabilirsiniz. Seri durumdan çıkarma özelliği olmadan BinaryFormattergerçekleşemeyen nadir durumlarda, desteklenmeyen bir uyumluluk paketiyle geri eklenebilir. Daha fazla bilgi için bkz BinaryFormatter . Geçiş kılavuzu: Uyumluluk paketi. Kaynaklar için System.Resources.Extensions.UseBinaryFormatter kullanmak amacıyla true uygulama bağlam anahtarının BinaryFormatter olarak ayarlanmasını gerektiren ek bir adım olduğunu unutmayın.
Uygulamasından uzağa geçiş BinaryFormatter
Serileştirme ve seri durumdan çıkarma sırasında içsel olarak işlenmemiş türler etkilenen senaryolarda kullanılıyorsa, .NET 9 veya sonraki bir sürüme geçişi tamamlamak için eylem gerçekleştirmeniz gerekir.
OLE senaryoları
Pano ve sürükle bırak gibi senaryolarda geçiş yapma hakkında daha fazla bilgi için bkzWindows Forms. ve Windows Presentation Foundation BinaryFormatter OLE kılavuzu.BinaryFormatter
Tasarım zamanında kaynakları yükleme ve kaydetme
ResX ile Tasarımcı senaryoları gibi kaynaklara seri hale getirme sırasında içsel olarak işlenmemiş türler için, 'den BinaryFormatter geçiş yapmak için belirtilen yol, serileştirmeye katılan tür veya özellik için bir TypeConverter kayıtlı olduğundan emin olmaktır. Bu şekilde, serileştirme ve seri durumdan çıkarma sırasında, TypeConverter bir zamanlar nerede BinaryFormatter kullanıldığı yerine kullanılır. Tür dönüştürücüsü uygulama hakkında daha fazla bilgi için bkz TypeConverter . Sınıf.
Uyumluluk geçici çözümü (önerilmez)
.NET 9 kullanıcılarından BinaryFormatter geçiş yapamazlar, desteklenmeyen bir uyumluluk paketi yükleyebilir. Daha fazla bilgi için bkz BinaryFormatter . Geçiş kılavuzu: Uyumluluk Paketi.
Dikkat
BinaryFormatter tehlikelidir ve hizmet reddi (DoS), bilgilerin açığa çıkması veya uzaktan kod yürütme gibi saldırılar için tüketen uygulamaları riske atması önerilmez. Riskler BinaryFormatter hakkında daha fazla bilgi için bkzBinaryFormatter kullanımında seri durumdan çıkarma riskleri.
Sorunlar
Windows Forms uygulamanızda BinaryFormatter serileştirme veya seri durumdan çıkarma ile ilgili beklenmeyen davranışlarla karşılaşıyorsanız lütfen github.com/dotnet/winforms'da bir sorun oluşturun ve sorunun BinaryFormatterkaldırılmasıyla ilgili olduğunu belirtin.