Aracılığıyla paylaş


BinaryFormatter serileştirme yöntemleri eskidir ve ASP.NET uygulamalarında yasaktır

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:

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.

  • 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 SYSLIB0011 olabilecek 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ı #pragma yö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. 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

Ayrıca bakınız