Freigeben über


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 Kompilierungsfehlern in allen C#- und Visual Basic-Projekttypen:

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.0 höher ab.
  • Sie ruft direkt eine der betroffenen APIs auf.
  • Der Warnungscode SYSLIB0011 wird 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.

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

Siehe auch