Metody serializace BinaryFormatter jsou zastaralé a zakázané v aplikacích ASP.NET

Serialize a Deserialize metody v BinaryFormatter, Formattera IFormatter jsou nyní zastaralé jako upozornění. BinaryFormatter Serializace je navíc pro ASP.NET aplikace zakázána ve výchozím nastavení.

Poznámka:

V .NET 7 jsou ovlivněná rozhraní API zastaralá jako chyba. Další informace naleznete v tématu rozhraní API pro serializaci BinaryFormatter vytvářejí chyby kompilátoru.

Změnit popis

Vzhledem k ohrožením zabezpečení jsou BinaryFormatternyní následující metody zastaralé a vytvářejí upozornění v době kompilace s ID SYSLIB0011. Kromě toho v aplikacích ASP.NET Core 5.0 a novějších vyvolá NotSupportedExceptionvýjimku, pokud webová aplikace nemá znovu povolenou BinaryFormatter funkcionalitu.

Následující metody serializace jsou také zastaralé a vytvářejí upozornění SYSLIB0011, ale nemají žádné změny chování:

Verze byla představena

5,0

Důvod změny

Tyto metody jsou označené zastaralé jako součást úsilí o ukončení využití BinaryFormatter v ekosystému .NET.

  • Přestaňte v kódu používat BinaryFormatter . Místo toho zvažte použití JsonSerializer nebo XmlSerializer. Další informace naleznete v průvodci zabezpečením BinaryFormatter.

  • Můžete dočasně potlačit BinaryFormatter upozornění v době kompilace, což je SYSLIB0011. Doporučujeme, abyste před výběrem této možnosti důkladně posoudili rizika vašeho kódu. Nejjednodušším způsobem, jak potlačit upozornění, je obklopit jednotlivé místo volání direktivami #pragma.

    // 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
    }
    

    Upozornění v souboru projektu můžete také potlačit.

    <PropertyGroup>
      <OutputType>Exe</OutputType>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Disable "BinaryFormatter is obsolete" warnings for entire project -->
      <NoWarn>$(NoWarn);SYSLIB0011</NoWarn>
    </PropertyGroup>
    

    Pokud potlačíte upozornění v souboru projektu, upozornění se potlačí pro všechny soubory kódu v projektu. Potlačení SYSLIB0011 nepotlačí upozornění způsobená použitím jiných zastaralých rozhraní API.

  • Pokud chcete v ASP.NET aplikacích dál používat BinaryFormatter , můžete ho znovu povolit v souboru projektu. Důrazně to ale nedoporučujeme. Další informace naleznete v průvodci zabezpečením BinaryFormatter.

    <PropertyGroup>
      <TargetFramework>net5.0</TargetFramework>
      <!-- Warning: Setting the following switch is *NOT* recommended in web apps. -->
      <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
    </PropertyGroup>
    

Další informace o doporučených akcích naleznete v Řešení problémů s zastaralostí a zakázáním BinaryFormatter.

Ovlivněná rozhraní API

Viz také