Aracılığıyla paylaş


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:

Önceki davranış

.NET 5'ten bu yana, etkilenen Serialize ve Deserialize yöntemlerinin kullanılması kimliğine SYSLIB0011sahip 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 SYSLIB0011bir 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.

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 BinaryFormatterkodunuzdan 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 BinaryFormatterkodunuzdan 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 BinaryFormatterkodunuzdan 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 BinaryFormatterkodunuzdan 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 BinaryFormatterkodunuzdan 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

Ayrıca bkz.