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.

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 SYSLIB0011derleme 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ı 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 ekosistemi içindeki kullanımını azaltma çabasının BinaryFormatter bir parçası olarak kullanım dışı olarak işaretlenir.

  • 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

Ayrıca bkz.