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:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
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.
Empfohlene Aktion
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
- 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)