BinaryFormatter serileştirme yöntemleri eskidir ve ASP.NET uygulamalarında yasaktır
Serialize
ve Deserialize
yöntemleri BinaryFormatterartık FormatterIFormatter uyarı olarak kullanılmıyor. Ayrıca, BinaryFormatter ASP.NET uygulamalar için serileştirme varsayılan olarak yasaktır.
Not
.NET 7'de, etkilenen API'ler hata olarak kullanımdan kaldırıldı. Daha fazla bilgi için bkz . BinaryFormatter serileştirme API'leri derleyici hataları üretir.
Açıklama değiştirildi
içindeki BinaryFormattergüvenlik açıkları nedeniyle aşağıdaki yöntemler artık kullanım dışıdır ve kimliğiyle SYSLIB0011
derleme zamanı uyarısı oluşturur. Ayrıca, ASP.NET Core 5.0 ve üzeri uygulamalarda, web uygulamasının işlevselliği yeniden etkinleştirilmediği BinaryFormatter sürece bir NotSupportedExceptionoluştururlar.
Aşağıdaki serileştirme yöntemleri de eskidir ve uyarı SYSLIB0011
oluşturur, ancak hiçbir davranış değişikliği yoktur:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Sürüm kullanıma sunulmuştur
5.0
Değişiklik nedeni
Bu yöntemler , .NET ekosistemi içindeki kullanımını azaltma çabasının BinaryFormatter bir parçası olarak kullanım dışı olarak işaretlenir.
Önerilen eylem
Kodunuzda kullanmayı BinaryFormatter durdurun. Bunun yerine veya XmlSerializerkullanmayı JsonSerializer göz önünde bulundurun. Daha fazla bilgi için bkz . BinaryFormatter güvenlik kılavuzu.
Derleme zamanı uyarısını BinaryFormatter geçici olarak gizleyebilirsiniz. Bu uyarı.
SYSLIB0011
Bu seçeneği belirlemeden önce kodunuzu riskler açısından kapsamlı bir şekilde değerlendirmenizi öneririz. Uyarıları gizlemenin en kolay yolu, tek tek çağrı sitesini yönergeleriyle#pragma
çevrelemektir.// Now read the purchase order back from disk using (var readStream = new FileStream("myfile.bin", FileMode.Open)) { var formatter = new BinaryFormatter(); #pragma warning disable SYSLIB0011 return (PurchaseOrder)formatter.Deserialize(readStream); #pragma warning restore SYSLIB0011 }
Uyarıyı proje dosyasında da gizleyebilirsiniz.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>
Proje dosyasındaki uyarıyı bastırırsanız, uyarı projedeki tüm kod dosyaları için gizlenirse.
SYSLIB0011
Gizleme, diğer eski API'lerin kullanılması nedeniyle oluşan uyarıları gizlemez.ASP.NET uygulamalarında kullanmaya BinaryFormatter devam etmek için proje dosyasında yeniden etkinleştirebilirsiniz. Ancak, bunun yapılmaması kesinlikle önerilir. Daha fazla bilgi için bkz . BinaryFormatter güvenlik kılavuzu.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Önerilen eylemler hakkında daha fazla bilgi için bkz . BinaryFormatter kullanımdan kaldırma ve devre dışı bırakma hatalarını çözme.
Etkilenen API’ler
- 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)