WPF-Migrationsleitfaden (Windows Presentation Foundation) für BinaryFormatter
Entfernen von BinaryFormatter
Ab .NET 9 BinaryFormatterwird es aufgrund bekannter Sicherheitsrisiken nicht mehr unterstützt, und die APIs lösen immer ein PlatformNotSupportedException für alle Projekttypen, einschließlich WPFApps, aus. Weitere Informationen zu den Risiken von BinaryFormatter und zum Grund für die Entfernung finden Sie im BinaryFormatter-Migrationsleitfaden.
Es wird erwartet, dass durch das Entfernen von BinaryFormatter viele WPF-Anwendungen betroffen sind, und Sie müssen Maßnahmen ergreifen, um die Migration zu .NET 9 oder einer höheren Version abzuschließen.
Auswirkungen von BinaryFormatter auf WPF
Vor .NET 9 verwendete Windows Presentation Foundation (WPF) BinaryFormatter zum Serialisieren und Deserialisieren von Daten für Szenarien wie Zwischenablage, Drag & Drop und Laden/Speichern des Zustands in Journal. Ab .NET 9 verwenden WPF und Windows Forms eine Teilmenge der BinaryFormatter-Implementierung intern für diese Szenarien. Die Risiken von BinaryFormatter können zwar nicht in der allgemeinen Serialisierung/Deserialisierung behoben werden, es wurden aber Maßnahmen ergriffen, um die Risiken in diesen sehr spezifischen Anwendungsfällen mit einer bekannten Gruppe von Typen zu mindern. Für unbekannte oder nicht unterstützte Typen ist weiterhin ein Fallback auf BinaryFormatter vorhanden, der einen PlatformNotSupportedException auslöst, es sei denn, in der Anwendung werden Migrationsschritte ausgeführt.
WPF- und WinForms-Apps behandeln die folgenden Typen zusammen mit Arrays und Listen dieser Typen. Zwischenablage, Drag & Drop und Avalon-Bindungen in Journal funktionieren weiterhin mit diesen Typen, ohne dass Migrationsschritte erforderlich sind.
bool
byte
char
decimal
double
int
sbyte
float
- TimeSpan
- DateTime
uint
string
nint
nuint
long
ulong
short
ushort
- PointF
- RectangleF
OLE-Szenarien
Informationen zu den Auswirkungen, die das Entfernen von BinaryFormatter auf OLE-Szenarien wie Zwischenablage und Drag & Drop hat, und einen Migrationsleitfaden finden Sie unter OLE-Leitfaden für BinaryFormatter in Windows Forms und Windows Presentation Foundation .
Sie können auf die Funktion verweisen, in der wir BinaryFormatter als Fallback zum Lesen/Speichern des zu behandelnden Objekts verwendet haben: SaveObjectToHandle and ReadObjectFromHandle für OLE-Szenarien.
Journaling
Für den Fall, dass ein Zustand gespeichert oder geladen werden muss, während der Navigationsverlauf in WPF verwaltet wird.
Zum Laden/Speichern rufen wir LoadSubStreams/ SaveSubStreams der DataStream
-Klasse auf. Wenn das verwendete Element nicht zu einem bekannten Typ gehört, der von der neuen Implementierung behandelt wird, wird BinaryFormatter verwendet.
Wenn ein Entwickler über Navigate
GoForward
JournalEntry navigiert oder GoBack
die Daten des Knotens geladen oder in einem Datenstrom gespeichert werden, um den Zustand zu speichern. Wenn der beteiligte Typ während der Serialisierung/Deserialisierung nicht systemintern behandelt wird, wird BinaryFormatter verwendet.
Referenz: DataStream.cs
Kompatibilitätsumgehung (nicht empfohlen)
.NET 9-Benutzer, die nicht von BinaryFormatter migrieren können, können ein nicht unterstütztes Kompatibilitätspaket installieren. Weitere Informationen finden Sie unter BinaryFormatter-Migrationsleitfaden: Kompatibilitätspaket.
Achtung
BinaryFormatter ist gefährlich und wird nicht empfohlen, da es genutzte Apps dem Risiko von Angriffen wie DoS-Angriffen (Denial-of-Service-Angriffe), der Veröffentlichung von Informationen oder der Remotecodeausführung aussetzt. Weitere Informationen zum Risiko, das BinaryFormatter darstellt, finden Sie unter Deserialisierungsrisiken bei der Verwendung von BinaryFormatter und verwandten Typen.
Probleme
Wenn bei Ihrer WPF-App unerwartetes Verhalten bezüglich BinaryFormatter auftritt, melden Sie ein Problem auf dotnet/wpf/issues, und geben Sie an, dass das Problem mit dem Entfernen von BinaryFormatter zusammenhängt.