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 Kompilierzeitfehlern für alle C#- und Visual Basic-Projekttypen:

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.

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

Siehe auch