BinaryFormatter-Serialisierungs-APIs erzeugen Compilerfehler
Im Rahmen des langfristigen BinaryFormatter-Plans werden wir weiterhin BinaryFormatter
-Funktionen aus unseren Bibliotheken löschen und Entwickler vom Typ absetzen. Ab .NET 7 führen Aufrufe der folgenden APIs zu Kompilierzeitfehlern für alle C#- und Visual Basic-Projekttypen:
- System.Exception.SerializeObjectState -Ereignis
- BinaryFormatter.Serialize-Methode
- BinaryFormatter.Deserialize-Methode
- Formatter.Serialize(Stream, Object)-Methode
- Formatter.Deserialize(Stream)-Methode
- IFormatter.Serialize(Stream, Object)-Methode
- IFormatter.Deserialize(Stream)-Methode
Vorheriges Verhalten
Seit .NET 5 erzeugte die Verwendung der betroffenen Serialize
-Methoden und Deserialize
eine Compilerwarnung mit der ID SYSLIB0011
. Weitere Informationen finden Sie unter BinaryFormatter-Serialisierungsmethoden sind veraltet und in ASP.NET-Apps (.NET 5) verboten.
Die Verwendung des Exception.SerializeObjectState-Ereignisses hat keinen Fehler verursacht.
Neues Verhalten
Ab .NET 7 führt die Verwendung einer der betroffenen APIs im Code zu einem Compilerfehler mit derselben ID SYSLIB0011
. Ihr Projekt ist betroffen, wenn es alle der folgenden Kriterien erfüllt:
- Es handelt sich um ein C#- oder Visual Basic-Projekt.
- Es zielt auf oder
net7.0
höher ab. - Es ruft direkt eine der betroffenen APIs auf.
- Der Warnungscode
SYSLIB0011
wird nicht bereits unterdrückt.
Eingeführt in Version
.NET 7
Typ des Breaking Changes
Diese Änderung kann sich auf die Quellkompatibilität auswirken.
Grund für die Änderung
Im Rahmen des langfristigen BinaryFormatter-Plans werden wir weiterhin BinaryFormatter
-Funktionen aus unseren Bibliotheken löschen und Entwickler vom Typ absetzen.
Empfohlene Maßnahme
Die beste Vorgehensweise besteht darin, aufgrund von Sicherheits- und Zuverlässigkeitsfehlern von BinaryFormatter
weg zu migrieren. BinaryFormatter
kann in einem zukünftigen Release aus .NET entfernt werden. Das .NET-Bibliotheksteam hat bereits die Haltung eingenommen, dass die neuesten Typen wie System.Half und System.DateOnly nicht mit BinaryFormatter
kompatibel sein werden.
Wenn Sie die Fehler unterdrücken müssen, können Sie dies tun, indem Sie die Richtlinien im ursprünglichen Veraltungsartikel befolgen. Sie können den Fehler auch projektweit deaktivieren, indem Sie eine Projekteigenschaft festlegen, die den Fehler zurück in eine Warnung konvertiert (um dem .NET 5/6-Verhalten zu entsprechen).
Warnung
Durch Festlegen dieser Eigenschaft kann sich das Hostverhalten ändern. Siehe <EnableUnsafeBinaryFormatterSerialization>-Eigenschaft.
<PropertyGroup>
...
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
Hinweis
Wenn ihr Projekt kompiliert und „Warnungen als Fehler“ aktiviert ist, schlägt die Kompilierung dennoch fehl. (Dies entspricht dem Verhalten der SDKs .NET 5 und .NET 6.) In diesem Fall müssen Sie die Warnung weiterhin in der SYSLIB0011
-Quelle oder im <NoWarn>
-Element Ihrer Projektdatei unterdrücken.
<EnableUnsafeBinaryFormatterSerialization>-Eigenschaft
Die <EnableUnsafeBinaryFormatterSerialization
-Eigenschaft wurde in .NET 5 eingeführt. Mit .NET 7 wurde das Verhalten dieses Schalters geändert, um das Laufzeitverhalten von Kompilierung und Host zu steuern. Die Bedeutung dieses Schalters unterscheidet sich je nach Projekttyp, wie in der folgenden Tabelle beschrieben.
Projekttyp | Eigenschaft auf true festgelegt |
Eigenschaft auf false festgelegt |
Eigenschaft nicht angegeben |
---|---|---|---|
Bibliothek/freigegebene Komponente1 | Die betroffenen APIs sind als Warnung veraltet. Die Kompilierung ist erfolgreich, es sei denn, Sie haben „Warnungen als Fehler“ für Ihre Anwendung aktiviert oder den Warnungscode SYSLIB0011 unterdrückt. |
Die betroffenen APIs sind als Fehler veraltet, und Aufrufe aus Ihrem Code für diese APIs schlagen zur Kompilierzeit fehl, es sei denn, der Fehler wird unterdrückt. | (Analog bei false ) |
Blazor- und MAUI-Apps2 | Aufrufe von BinaryFormatter schlagen zur Laufzeit fehl. |
Aufrufe von BinaryFormatter schlagen zur Laufzeit fehl. |
Aufrufe von BinaryFormatter schlagen zur Laufzeit fehl. |
ASP.NET-App | Die betroffenen APIs sind als Warnung veraltet. Die Kompilierung ist erfolgreich, es sei denn, Sie haben „Warnungen als Fehler“ für Ihre Anwendung aktiviert oder den Warnungscode SYSLIB0011 unterdrückt. Die Runtime erlaubt Aufrufe von BinaryFormatter , unabhängig davon, ob der Aufruf von Ihrem Code oder von einer Abhängigkeit stammt, die Sie nutzen. |
Die betroffenen APIs sind als Fehler veraltet, und Aufrufe aus Ihrem Code für diese APIs schlagen zur Kompilierzeit fehl, es sei denn, der Fehler wird unterdrückt. Die Runtime verbietet Aufrufe von BinaryFormatter , unabhängig davon, ob der Aufruf von Ihrem Code oder von einer Abhängigkeit stammt, die Sie nutzen. |
(Analog bei false ) |
Desktop-Apps und alle anderen App-Typen | Die betroffenen APIs sind als Warnung veraltet. Die Kompilierung ist erfolgreich, es sei denn, Sie haben „Warnungen als Fehler“ für Ihre Anwendung aktiviert oder den Warnungscode SYSLIB0011 unterdrückt. Die Runtime erlaubt Aufrufe von BinaryFormatter , unabhängig davon, ob der Aufruf von Ihrem Code oder von einer Abhängigkeit stammt, die Sie nutzen. |
Die betroffenen APIs sind als Fehler veraltet, und Aufrufe aus Ihrem Code für diese APIs schlagen zur Kompilierzeit fehl, es sei denn, der Fehler wird unterdrückt. Die Runtime verbietet Aufrufe von BinaryFormatter , unabhängig davon, ob der Aufruf von Ihrem Code oder von einer Abhängigkeit stammt, die Sie nutzen. |
Die betroffenen APIs sind als Fehler veraltet, und Aufrufe aus Ihrem Code für diese APIs schlagen zur Kompilierzeit fehl, es sei denn, der Fehler wird unterdrückt. Die Runtime erlaubt Aufrufe von BinaryFormatter , unabhängig davon, ob der Aufruf von Ihrem Code oder von einer Abhängigkeit stammt, die Sie nutzen. |
1Die Laufzeitrichtlinie wird vom App-Host gesteuert. Aufrufe von BinaryFormatter
können zur Laufzeit dennoch fehlschlagen, selbst wenn <EnableUnsafeBinaryFormatterSerialization>
innerhalb der Projektdatei Ihrer Bibliothek auf true
festgelegt ist. Bibliotheken können die Laufzeitrichtlinie des App-Hosts nicht außer Kraft setzen.
2 Die Blazor- und MAUI-Runtimes verbieten Aufrufe von BinaryFormatter
. Unabhängig vom Wert, den Sie für <EnableUnsafeBinaryFormatterSerialization>
festlegen, schlagen die Aufrufe zur Laufzeit fehl. Rufen Sie diese APIs nicht aus Blazor- oder MAUI-Anwendungen oder Bibliotheken auf, die von Blazor- oder MAUI-Apps verwendet werden sollen.
Betroffene APIs
- System.Exception.SerializeObjectState
- 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)