Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 Kompilierungsfehlern in allen 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 Und Deserialize Methoden eine Compilerwarnung mit ID SYSLIB0011. Weitere Informationen finden Sie unter BinaryFormatter-Serialisierungsmethoden sind veraltet und in ASP.NET-Anwendungen (.NET 5) verboten.
Die Verwendung des Exception.SerializeObjectState Ereignisses hat keinen Fehler verursacht.
Neues Verhalten
Ab .NET 7 erzeugt die Verwendung einer der betroffenen APIs im Code einen Compilerfehler mit derselben ID. SYSLIB0011 Ihr Projekt wird betroffen sein, wenn es alle folgenden Kriterien erfüllt:
- Es ist ein C#- oder Visual Basic-Projekt.
- Es zielt auf oder
net7.0höher ab. - Sie ruft direkt eine der betroffenen APIs auf.
- Der Warnungscode
SYSLIB0011wird nicht bereits unterdrückt.
Eingeführte Version
.NET 7
Art der einschneidenden Änderung
Diese Änderung kann sich auf die Quellkompatibilität auswirken.
Grund für Änderung
Im Rahmen des langfristigen BinaryFormatter-Plans werden wir weiterhin BinaryFormatter-Funktionen aus unseren Bibliotheken löschen und Entwickler vom Typ absetzen.
Empfohlene Aktion
Aufgrund der Sicherheits- und Zuverlässigkeitsfehler besteht die beste Vorgehensweise darin, von BinaryFormatter weg zu migrieren.
BinaryFormatter kann in einer zukünftigen Version von .NET entfernt werden. Das .NET-Bibliotheken-Team hat bereits eine Haltung dazu eingenommen, dass neuere Typen wie System.Half und System.DateOnly nicht mit BinaryFormatter kompatibel sind.
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 wieder in eine Warnung konvertiert (um dem .NET 5/6-Verhalten zu entsprechen).
Warnung
Das Festlegen dieser Eigenschaft kann das Hostverhalten ändern. Siehe <EnableUnsafeBinaryFormatterSerialization> Eigenschaft.
<PropertyGroup>
...
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
Hinweis
Wenn Ihr Projekt mit aktivierten "Warnungen als Fehler" kompiliert wird, schlägt die Kompilierung weiterhin fehl. (Dies entspricht dem Verhalten, das in .NET 5- und .NET 6-SDKs ausgeliefert wurde.) Wenn dies der Fall ist, müssen Sie die Warnung weiterhin in der SYSLIB0011 Quelle oder im Element Ihrer Projektdatei <NoWarn> unterdrücken.
<EnableUnsafeBinaryFormatterSerialization>-Eigenschaft
Die <EnableUnsafeBinaryFormatterSerialization Eigenschaft wurde in .NET 5 eingeführt. Mit .NET 7 hat sich das Verhalten dieser Option geändert, um das Kompilierungs- und Hostlaufzeitverhalten 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/gemeinsame 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 Sie haben den SYSLIB0011 Warnungscode unterdrückt. |
Die betroffenen APIs sind als Fehler veraltet, und Aufrufe von Ihrem Code an diese APIs schlagen zur Kompilierungszeit fehl, es sei denn, der Fehler wird unterdrückt. | (Identisch mit . false) |
| Blazor- und MAUI-Apps2 | Aufrufe zu BinaryFormatter fehlschlagen zur Laufzeit. |
Aufrufe zu BinaryFormatter werden zur Laufzeit fehlschlagen. |
Aufrufe zu BinaryFormatter werden während der Laufzeit fehlschlagen. |
| 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 Sie haben den SYSLIB0011 Warnungscode 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 von Ihrem Code an diese APIs schlagen zur Kompilierungszeit fehl, es sei denn, der Fehler wird unterdrückt. Die Laufzeit wird Aufrufe zu BinaryFormatter verbieten, unabhängig davon, ob sie aus Ihrem Code oder einer von Ihnen genutzten Abhängigkeit stammen. |
(Identisch mit . 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 Sie haben den SYSLIB0011 Warnungscode 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 von Ihrem Code an diese APIs schlagen zur Kompilierungszeit fehl, es sei denn, der Fehler wird unterdrückt. Die Laufzeit wird Aufrufe zu BinaryFormatter verbieten, unabhängig davon, ob sie aus Ihrem Code oder einer von Ihnen genutzten Abhängigkeit stammen. |
Die betroffenen APIs sind als Fehler veraltet, und Aufrufe von Ihrem Code an diese APIs schlagen zur Kompilierungszeit 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 in BinaryFormatter können zur Laufzeit weiterhin fehlschlagen, auch wenn <EnableUnsafeBinaryFormatterSerialization> in der Projektdatei Ihrer Bibliothek auf true gesetzt 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 von dem Wert, den Sie für <EnableUnsafeBinaryFormatterSerialization> festlegen, schlagen die Aufrufe zur Laufzeit fehl. Rufen Sie diese APIs nicht von Blazor- oder MAUI-Anwendungen oder von Bibliotheken auf, die von Blazor- oder MAUI-Apps genutzt 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)