Migratiehandleiding voor Windows Presentation Foundation(WPF) voor BinaryFormatter
BinaryFormatter verwijdering
Vanaf .NET 9 wordt dit BinaryFormatter niet meer ondersteund vanwege de bekende beveiligingsrisico's en de BIJBEHORENDE API's worden altijd gebruikt PlatformNotSupportedException voor alle projecttypen, inclusief WPF apps. Zie deBinaryFormatterBinaryFormatter voor meer informatie over de risico's en de reden voor het verwijderen ervan.
Bij BinaryFormatterhet verwijderen wordt verwacht dat veel WPF toepassingen worden beïnvloed en dat u actie moet ondernemen om uw migratie naar .NET 9 of een latere versie te voltooien.
Hoe BinaryFormatter is dit van invloed op WPF
Vóór .NET 9 werd Windows Presentation Foundation (WPF) gebruikt BinaryFormatter voor het serialiseren en deserialiseren van gegevens voor scenario's zoals klembord, slepen en neerzetten en laden/opslaan in Logboek. Vanaf .NET 9 WPF en Windows Forms wordt een subset van de BinaryFormatter implementatie intern gebruikt voor deze scenario's. Hoewel BinaryFormatterde risico's niet kunnen worden aangepakt in serialisatie/deserialisatie voor algemeen gebruik, zijn er maatregelen genomen om de risico's in deze zeer specifieke gebruiksscenario's met een bekende set typen te beperken. Er is nog steeds een terugval van toepassing op onbekende of niet-ondersteunde BinaryFormatter typen. Dit genereert een PlatformNotSupportedException tenzij er migratiestappen worden uitgevoerd in de toepassing.
WPF en WinForms-apps verwerken beide de volgende typen, samen met matrices en lijsten met deze typen. Klembord, slepen en neerzetten en De Binding in Het Logboek blijft werken met deze typen zonder dat er migratiestappen nodig zijn.
bool
byte
char
decimal
double
int
sbyte
float
- TimeSpan
- DateTime
uint
string
nint
nuint
long
ulong
short
ushort
- PointF
- RectangleF
OLE-scenario's
Zie OLE-richtlijnen voor Windows Forms en Windows Presentation Foundation BinaryFormatter voor informatie over de effecten BinaryFormatter die worden verwijderd op OLE-scenario's, zoals klembord en slepen en neerzetten, evenals migratierichtlijnen.
U kunt verwijzen naar de functie waarin we hebben gebruikt BinaryFormatter als terugval voor het lezen/opslaan van het object voor verwerking: SaveObjectToHandle en ReadObjectFromHandle voor OLE-scenario's
Journaling
In het geval dat we een status moeten opslaan of laden tijdens het beheren van de navigatiegeschiedenis in WPF.
Voor het laden/opslaan roepen we LoadSubStreams/ SaveSubStreams van DataStream
klasse aan. Als het element dat wordt gebruikt in geen deel van het type weet dat wordt verwerkt door de nieuwe implementatie, wordt het gebruikt BinaryFormatter.
Wanneer een ontwikkelaar door JournalEntry navigeert met behulp van Navigate
, GoForward
of GoBack
, worden de gegevens van het knooppunt geladen of opgeslagen in een stroom om de status op te slaan. Als het betrokken type niet intrinsiek wordt verwerkt tijdens serialisatie/deserialisatie, BinaryFormatter wordt gebruikt.
Ref: DataStream.cs
Tijdelijke compatibiliteit (niet aanbevolen)
.NET 9-gebruikers die niet kunnen migreren BinaryFormatter , kunnen een niet-ondersteund compatibiliteitspakket installeren. Zie BinaryFormatter de migratiehandleiding: Compatibiliteitspakket voor meer informatie.
Let op
BinaryFormatter is gevaarlijk en wordt niet aanbevolen omdat het het gebruik van apps in gevaar brengt voor aanvallen zoals Denial of Service (DoS), openbaarmaking van informatie of uitvoering van externe code. Zie Deserialisatierisico's die worden gebruikt en gerelateerde typenBinaryFormatter.
Problemen
Als u onverwacht gedrag ondervindt met uw WPF toepassing met betrekking tot BinaryFormatter, dient u een probleem in bij dotnet/wpf/issues en geeft u aan dat het probleem te maken heeft met het verwijderen van BinaryFormatter.