BinaryFormatter serileştirme API'leri derleyici hataları üretir
BinaryFormatter uzun vadeli kullanımdan kaldırma planının bir parçası olarak, kitaplıklarımızdaki işlevleri kaldırmaya BinaryFormatter
ve geliştiricilerin bu türdeki işlevleri kaldırmaya devam ediyoruz. .NET 7'den başlayarak, aşağıdaki API'lere yapılan çağrılar tüm C# ve Visual Basic proje türlerinde derleme zamanı hataları oluşturur:
- System.Exception.SerializeObjectState Olay
- BinaryFormatter.Serialize Yöntem
- BinaryFormatter.Deserialize Yöntem
- Formatter.Serialize(Stream, Object) Yöntem
- Formatter.Deserialize(Stream) Yöntem
- IFormatter.Serialize(Stream, Object) Yöntem
- IFormatter.Deserialize(Stream) Yöntem
Önceki davranış
.NET 5'ten bu yana, etkilenen Serialize
ve Deserialize
yöntemlerinin kullanılması kimliğine SYSLIB0011
sahip bir derleyici uyarısı üretmiştir. Daha fazla bilgi için bkz . BinaryFormatter serileştirme yöntemleri eskidir ve ASP.NET uygulamalarında (.NET 5) yasaktır.
Olay kullanıldığında Exception.SerializeObjectState hata oluşmadı.
Yeni davranış
.NET 7'den başlayarak, kodda etkilenen API'lerden herhangi birinin kullanılması aynı kimlikte SYSLIB0011
bir derleyici hatası oluşturur. Projeniz aşağıdaki ölçütlerin tümünü karşılıyorsa etkilenir:
- Bu bir C# veya Visual Basic projesidir.
- Bu, veya daha yüksek bir hedeftir
net7.0
. - Etkilenen API'lerden birini doğrudan çağırır.
- Uyarı kodunu zaten gizlemiyor
SYSLIB0011
.
Sürüm kullanıma sunulmuştur
.NET 7
Hataya neden olan değişikliğin türü
Bu değişiklik kaynak uyumluluğunu etkileyebilir.
Değişiklik nedeni
BinaryFormatter uzun vadeli kullanımdan kaldırma planının bir parçası olarak, kitaplıklarımızdaki işlevleri kaldırmaya BinaryFormatter
ve geliştiricilerin bu türdeki işlevleri kaldırmaya devam ediyoruz.
Önerilen eylem
En iyi eylem, güvenlik ve güvenilirlik açıkları nedeniyle geçiş BinaryFormatter
yapmaktır. BinaryFormatter
gelecek bir sürümde .NET'ten kaldırılabilir. .NET kitaplıkları ekibi, gibi System.HalfSystem.DateOnly son türlerin ile uyumlu olmayacağına ilişkin bir duruş sergilemiştir BinaryFormatter
.
Hataları gizlemeniz gerekiyorsa, özgün kullanımdan kaldırılma makalesindeki yönergeleri izleyerek bunu yapabilirsiniz. Ayrıca hatayı bir uyarıya dönüştüren bir proje özelliği ayarlayarak (.NET 5/6 davranışıyla eşleşecek şekilde) proje genelinde hatasını devre dışı bırakabilirsiniz.
Uyarı
Bu özelliğin ayarlanması konak davranışını değiştirebilir. Bkz <. EnableUnsafeBinaryFormatterSerialization> özelliği.
<PropertyGroup>
...
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
Not
Projeniz "hata olarak uyarılar" etkin olarak derlenirse, derleme yine başarısız olur. (Bu, .NET 5 ve .NET 6 SDK'larında gönderilen davranışla eşleşir.) Böyle bir durumda, uyarıyı SYSLIB0011
kaynakta veya proje dosyanızın <NoWarn>
öğesinde gizlemeniz gerekir.
<EnableUnsafeBinaryFormatterSerialization> özelliği
<EnableUnsafeBinaryFormatterSerialization
özelliği .NET 5'te kullanıma sunulmuştur. .NET 7 ile bu anahtarın davranışı hem derleme hem de konak çalışma zamanı davranışını denetlemek için değişti. Bu anahtarın anlamı, aşağıdaki tabloda açıklandığı gibi proje türüne göre farklılık gösterir.
Proje türü | Özellik olarak ayarlandı true |
Özellik olarak ayarlandı false |
Özellik atlanmış |
---|---|---|---|
Kitaplık/paylaşılan bileşen1 | Etkilenen API'ler uyarı olarak kullanımdan kaldırıldı. Uygulamanız için "hata olarak uyarılar" etkinleştirilmediği veya uyarı kodunu gizlemediğiniz SYSLIB0011 sürece derleme başarılı olur. |
Etkilenen API'ler hata olarak eskir ve hata gizlenmediği sürece kodunuzdan bu API'lere yapılan çağrılar derleme zamanında başarısız olur. | (ile aynıdır false .) |
Blazor ve MAUI uygulamaları2 | BinaryFormatter çağrısı çalışma zamanında başarısız olur. |
BinaryFormatter çağrısı çalışma zamanında başarısız olur. |
BinaryFormatter çağrısı çalışma zamanında başarısız olur. |
ASP.NET uygulaması | Etkilenen API'ler uyarı olarak kullanımdan kaldırıldı. Uygulamanız için "hata olarak uyarılar" etkinleştirilmediği veya uyarı kodunu gizlemediğiniz SYSLIB0011 sürece derleme başarılı olur. Çalışma zamanı, çağrısının BinaryFormatter kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın çağrısına izin verir. |
Etkilenen API'ler hata olarak eskir ve hata gizlenmediği sürece kodunuzdan bu API'lere yapılan çağrılar derleme zamanında başarısız olur. Çalışma zamanı, çağrının BinaryFormatter kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın çağrısı yapmalarını yasaklar. |
(ile aynıdır false .) |
Masaüstü uygulamaları ve diğer tüm uygulama türleri | Etkilenen API'ler uyarı olarak kullanımdan kaldırıldı. Uygulamanız için "hata olarak uyarılar" etkinleştirilmediği veya uyarı kodunu gizlemediğiniz SYSLIB0011 sürece derleme başarılı olur. Çalışma zamanı, çağrısının BinaryFormatter kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın çağrısına izin verir. |
Etkilenen API'ler hata olarak eskir ve hata gizlenmediği sürece kodunuzdan bu API'lere yapılan çağrılar derleme zamanında başarısız olur. Çalışma zamanı, çağrının BinaryFormatter kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın çağrısı yapmalarını yasaklar. |
Etkilenen API'ler hata olarak eskir ve hata gizlenmediği sürece kodunuzdan bu API'lere yapılan çağrılar derleme zamanında başarısız olur. Çalışma zamanı, çağrısının BinaryFormatter kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın çağrısına izin verir. |
1Çalışma zamanı ilkesi uygulama konağı tarafından denetlendi. BinaryFormatter
kitaplığınızın proje dosyası içinde olarak ayarlansa <EnableUnsafeBinaryFormatterSerialization>
true
bile' çağrısı çalışma zamanında başarısız olabilir. Kitaplıklar uygulama konağı çalışma zamanı ilkesini geçersiz kılamaz.
2Blazor ve MAUI çalışma zamanları için BinaryFormatter
çağrıları yasaklar. için <EnableUnsafeBinaryFormatterSerialization>
ayarladığınız herhangi bir değerden bağımsız olarak, çağrılar çalışma zamanında başarısız olur. Bu API'leri Blazor veya MAUI uygulamalarından veya Blazor veya MAUI uygulamaları tarafından kullanılması amaçlanan kitaplıklardan çağırmayın.
Etkilenen API’ler
- System.Exception.SerializeObjectState
- 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)