BinaryFormatter-Serialisierungsmethoden sind veraltet und in ASP.NET-Apps verboten

Die Methoden Serialize und Deserialize für BinaryFormatter, Formatter und IFormatter sind nun veraltet und generieren eine Warnung. Darüber hinaus ist die BinaryFormatter-Serialisierung in ASP.NET-Apps standardmäßig verboten.

Hinweis

In .NET 7 sind die betroffenen APIs als Fehler veraltet. Weitere Informationen finden Sie unter BinaryFormatter-Serialisierungs-APIs erzeugen Compilerfehler.

Änderungsbeschreibung

Aufgrund von Sicherheitsrisiken in BinaryFormatter sind die folgenden Methoden jetzt veraltet und lösen zur Kompilierzeit eine Warnung mit der ID SYSLIB0011 aus. Darüber hinaus wird NotSupportedException in ASP.NET Core 5.0-Apps (und höher)ausgelöst, es sei denn, BinaryFormatter wurde durch die Web-App wieder aktiviert.

Die folgenden Serialisierungsmethoden sind jetzt ebenfalls veraltet und lösen die Warnung SYSLIB0011 aus, führen jedoch nicht zu Änderungen im Verhalten:

Eingeführt in Version

5.0

Grund für die Änderung

Diese Methoden wurden im Rahmen unsere Bemühungen als veraltet markiert, die Nutzung von BinaryFormatter im .NET-Ökosystem einzudämmen.

  • Verwenden Sie BinaryFormatter nicht mehr in Ihrem Code. Verwenden Sie stattdessen JsonSerializer oder XmlSerializer. Weitere Informationen finden Sie im BinaryFormatter-Sicherheitsleitfaden.

  • Sie können vorübergehend die BinaryFormatter-Warnung zur Kompilierzeit unterdrücken, die SYSLIB0011 lautet. Es empfiehlt sich, Ihren Code gründlich auf Risiken zu untersuchen, bevor Sie sich für diese Option entscheiden. Die Warnungen lassen sich am einfachsten unterdrücken, indem Sie die einzelne Aufrufsite mit #pragma-Anweisungen umschließen.

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

    Sie können die Warnung auch in der Projektdatei unterdrücken.

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

    Wenn Sie die Warnung in der Projektdatei unterdrücken, wird sie für alle Codedateien im Projekt unterdrückt. Durch Unterdrücken von SYSLIB0011 werden keine Warnungen unterdrückt, die von anderen veralteten APIs verursacht werden.

  • Um BinaryFormatter weiterhin in ASP.NET-Apps zu verwenden, können Sie die Option in der Projektdatei wieder aktivieren. Es wird jedoch dringend empfohlen, dies nicht zu tun. Weitere Informationen finden Sie im BinaryFormatter-Sicherheitsleitfaden.

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

Weitere Informationen zu empfohlenen Aktionen finden Sie unter Resolving BinaryFormatter obsoletion and disablement errors (Auflösen von Fehlern aufgrund der Veraltung und Deaktivierung von BinaryFormatter).

Betroffene APIs

Siehe auch