Migreringsguide för Windows Presentation Foundation(WPF) för BinaryFormatter
BinaryFormatter borttagning
Från och med .NET 9 BinaryFormatter stöds inte längre på grund av dess kända säkerhetsrisker och dess API:er genererar alltid en PlatformNotSupportedException för alla projekttyper, inklusive WPF appar. Mer information om riskerna BinaryFormatter och orsaken till borttagningen finns i migreringsguidenBinaryFormatter.
Vid BinaryFormatterborttagningen förväntas många WPF program påverkas och du måste vidta åtgärder för att slutföra migreringen till .NET 9 eller en senare version.
Hur BinaryFormatter påverkar WPF
Före .NET 9 används WPF Windows Presentation Foundation (BinaryFormatter) för att serialisera och deserialisera data för scenarier som Urklipp, dra och släpp och läsa in/lagra tillstånd i Journal. Från och med .NET 9 WPF och Windows Forms använder en delmängd av implementeringen BinaryFormatter internt för dessa scenarier. Även om BinaryFormatterrisker inte kan hanteras i generell serialisering/deserialisering, har åtgärder vidtagits för att minska riskerna i dessa mycket specifika användningsfall med en känd uppsättning typer. En återställning till BinaryFormatter finns fortfarande för okända eller typer som inte stöds, vilket utlöser en PlatformNotSupportedException såvida inte migreringsåtgärder vidtas i programmet.
WPF och WinForms-appar hanterar båda följande typer, tillsammans med matriser och listor av dessa typer. Urklipp, dra och släpp och Avalon-bindning i Journal fortsätter att fungera med dessa typer utan att det behövs några migreringssteg.
bool
byte
char
decimal
double
int
sbyte
float
- TimeSpan
- DateTime
uint
string
nint
nuint
long
ulong
short
ushort
- PointF
- RectangleF
OLE-scenarier
Information om vilka effekter BinaryFormatter borttagningen har på OLE-scenarier som Urklipp och dra och släpp samt migreringsvägledning finns i Vägledning för Windows Forms och Windows Presentation Foundation BinaryFormatter OLE.
Du kan referera till funktionen där vi har använt BinaryFormatter som reserv för att läsa/spara objekt att hantera: SaveObjectToHandle och ReadObjectFromHandle för OLE-scenarier
Journalförande
Om vi behöver lagra eller läsa in ett tillstånd när du hanterar navigeringshistoriken i WPF.
För att läsa in/spara anropar vi LoadSubStreams/ SaveSubStreams för DataStream
klassen. Om elementet som används i inte en del av den know-typ som hanteras av den nya implementeringen använder BinaryFormatterdet .
När en utvecklare navigerar genom JournalEntry med hjälp av Navigate
, GoForward
eller GoBack
, läses nodens data in eller sparas i en dataström för att spara tillståndet. Om den berörda typen inte hanteras i sig under serialisering/deserialisering BinaryFormatter används.
Referens: DataStream.cs
Lösning för kompatibilitet (rekommenderas inte)
.NET 9-användare som inte kan migrera bort från BinaryFormatter kan installera ett kompatibilitetspaket som inte stöds. Mer information finns i migreringsguide BinaryFormatter : Kompatibilitetspaket.
Varning
BinaryFormatter är farligt och rekommenderas inte eftersom det utsätter användning av appar för risk för attacker som DoS (Denial of Service), avslöjande av information eller fjärrkörning av kod. Mer information om riskerna BinaryFormatter finns i Deserialiseringsrisker vid användning av BinaryFormatter och relaterade typer.
Problem
Om du upplever ett oväntat beteende med ditt WPF program när det gäller BinaryFormatteranger du ett problem på dotnet/wpf/issues och anger att problemet är relaterat till borttagningen av BinaryFormatter.