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 uzun vadeli kullanımdan kaldırma planının bir parçası olarak, kitaplıklarımızdaki işlevselliği kaldırmaya ve geliştiricilerin bu türü kullanmayı bırakmalarını sağlamaya BinaryFormatter 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 etkinlik
- BinaryFormatter.Serialize yöntemi
- BinaryFormatter.Deserialize yöntemi
- Formatter.Serialize(Stream, Object) yöntemi
- Formatter.Deserialize(Stream) yöntemi
- IFormatter.Serialize(Stream, Object) yöntemi
- IFormatter.Deserialize(Stream) yöntemi
Önceki davranış
.NET 5'ten bu yana, etkilenen Serialize ve Deserialize yöntemlerinin kullanılması kimliğine sahip bir derleyici SYSLIB0011 üretmiştir. Daha fazla bilgi için bkz . BinaryFormatter serileştirme yöntemleri eskidir ve ASP.NET uygulamalarında (.NET 5) yasaktır.
Exception.SerializeObjectState olayı kullanıldığında hata oluşmadı.
Yeni davranış
.NET 7'den başlayarak, kodda etkilenen API'lerden herhangi birinin kullanılması aynı kimlikte bir derleyici SYSLIB0011 oluşturur. Projeniz aşağıdaki ölçütlerin tümünü karşılıyorsa etkilenir:
- Bu bir C# veya Visual Basic projesidir.
-
net7.0veya daha yükseği hedefliyor. - Etkilenen API'lerden birini doğrudan çağırır.
-
SYSLIB0011uyarı kodunu zaten bastırmıyor.
Sürüm kullanıma sunulmuştur
.NET 7
Kesinti yaratan değişiklik türü
Bu değişiklik kaynak uyumluluğunuetkileyebilir.
Değişiklik nedeni
BinaryFormatter uzun vadeli kullanımdan kaldırma planının bir parçası olarak, kitaplıklarımızdaki işlevselliği kaldırmaya ve geliştiricilerin bu türü kullanmayı bırakmalarını sağlamaya BinaryFormatter devam ediyoruz.
Önerilen eylem
En iyi eylem, güvenlik ve güvenilirlik açıkları nedeniyle BinaryFormatter'ten uzaklaşmaktır.
BinaryFormatter gelecek bir sürümde .NET'ten kaldırılabilir. .NET kitaplıkları ekibi, System.Half ve System.DateOnly gibi son türlerin BinaryFormatter ile uyumlu olmayacağı yönünde bir duruş sergilemiştir.
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>
Uyarı
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> özellik
<EnableUnsafeBinaryFormatterSerialization özelliği .NET 5'te kullanıma sunulmuştur. .NET 7 ile bu anahtarın davranışı hem derleme hem de ana makine çalışma zamanı davranışını denetlemek için değişti. Bu anahtar düğmesinin anlamı, proje türüne göre, aşağıdaki tabloda açıklandığı gibi farklılık gösterir.
| Proje türü | Özellik true olarak ayarlandı |
Özellik false olarak ayarlandı |
Özellik ihmal edilmiş |
|---|---|---|---|
| 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 | Çağrılar BinaryFormatter çalışma anında başarısız kalır. |
BinaryFormatter çağrıları çalışma zamanında başarısız olacak. |
Çağrılar BinaryFormatter çalışma zamanı sırası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ının kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın 'yi BinaryFormatter. |
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 kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın çağrısı yapmalarını BinaryFormatter. |
(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ının kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın 'yi BinaryFormatter. |
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 kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın çağrısı yapmalarını BinaryFormatter. |
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 kodunuzdan mı yoksa kullandığınız bir bağımlılıktan mı kaynaklandığına bakılmaksızın 'yi BinaryFormatter. |
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ı BinaryFormatter çağrılarını 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)