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.
Serializeve 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.
Uyarı
.NET 7'de, etkilenen API'lerhata olarak kullanımdan kaldırıldı. Daha fazla bilgi için bkz . BinaryFormatter serileştirme API'leri derleyici hataları üretir.
Açıklamayı değiştir
içindeki BinaryFormatter nedeniyle, aşağıdaki yöntemler artık kullanım dışıdır ve SYSLIB0011 kimliğiyle bir derleme zamanı uyarısı oluşturmaktadır. Ayrıca, ASP.NET Core 5.0 ve üzeri uygulamalarda, web uygulaması NotSupportedException işlevselliğini yeniden etkinleştirmediği sürece bir BinaryFormatter hatası fırlatırlar.
Aşağıdaki serileştirme yöntemleri de eskidir ve uyarı SYSLIB0011oluş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 ekosisteminde BinaryFormatter kullanımını azaltma çabalarının bir parçası olarak eski olarak işaretlenmiştir.
Önerilen eylem
Kodunuzda BinaryFormatter kullanımını durdurun. Bunun yerine JsonSerializer veya XmlSerializer kullanmayı 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, ki bu
SYSLIB0011olabilecek bir uyarıdır. Bu seçeneği belirlemeden önce kodunuzu riskler açısından kapsamlı bir şekilde değerlendirmenizi öneririz. Uyarıları gizlemenin en kolay yolu, tekil çağrı noktasını#pragmayönergelerle kuşatmaktır.// 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>Projede dosya içindeki uyarıyı yoksayarsanız, uyarı projedeki tüm kod dosyaları için yoksayılır.
SYSLIB0011Gizleme, 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)