Guida alla migrazione di Windows Presentation Foundation(WPF) per BinaryFormatter

BinaryFormatter rimozione

A partire da .NET 9, BinaryFormatter non è più supportato a causa dei rischi noti per la sicurezza e le API generano sempre un'eccezione PlatformNotSupportedException per tutti i tipi di progetto, incluse WPF le app. Per maggiori informazioni sui rischi BinaryFormatter e sul motivo della rimozione, consultare la BinaryFormatter guida alla migrazione.

Con la rimozione di BinaryFormatter, è previsto che molte WPF applicazioni siano interessate, e sarà necessario intervenire per completare la migrazione a .NET 9 o a una versione successiva.

Come BinaryFormatter influisce su WPF

Prima di .NET 9, Windows Presentation Foundation (WPF) usava BinaryFormatter per serializzare e deserializzare i dati per scenari quali appunti, trascinamento della selezione e caricamento/archiviazione nello stato journal. A partire da .NET 9 WPF e Windows Form, usare un subset dell'implementazione BinaryFormatter internamente per questi scenari. Anche se i rischi di BinaryFormatter non possono essere affrontati nella serializzazione/deserializzazione per utilizzo generico, sono state adottate misure per attenuare i rischi in questi casi d'uso molto specifici con un set noto di tipi. Il fallback a BinaryFormatter è ancora disponibile per i tipi sconosciuti o non supportati, che genereranno un PlatformNotSupportedException a meno che non vengano eseguiti passaggi di migrazione nell'applicazione.

WPF e le app WinForms gestiscono entrambi i tipi seguenti, insieme a matrici ed elenchi di questi tipi. Gli appunti, il trascinamento della selezione e l'associazione Avalon nel journal continueranno a funzionare con questi tipi senza alcuna procedura di migrazione necessaria.

Scenari OLE

Per informazioni sugli effetti che la rimozione di BinaryFormatter ha sugli scenari OLE, ad esempio gli appunti e il trascinamento della selezione, nonché sulla guida alla migrazione, consultare la sezione Linee guida OLE BinaryFormatterdi Windows Forms e Windows Presentation Foundation.

È possibile fare riferimento alla funzione in cui è stato usato BinaryFormatter come fallback per leggere/salvare l'oggetto da gestire: SaveObjectToHandle e ReadObjectFromHandle per gli scenari OLE

Inserimento nel journal

Nel caso in cui sia necessario archiviare o caricare uno stato durante la gestione della cronologia di spostamento in WPF.

Per caricare/salvare, viene chiamato LoadSubStreams/ SaveSubStreams di classe DataStream. Se l'elemento utilizzato non è parte del tipo noto gestito dalla nuova implementazione, userà BinaryFormatter.

Quando uno sviluppatore passa attraverso JournalEntry usando Navigate,GoForward o GoBack, i dati del nodo vengono caricati o salvati in un flusso per salvare lo stato. Se il tipo interessato non viene gestito intrinsecamente durante la serializzazione/deserializzazione, viene utilizzato BinaryFormatter.

Riferimento: DataStream.cs

Gli utenti di .NET 9 che non possono eseguire la migrazione da BinaryFormatter possono installare un pacchetto di compatibilità non supportato. Per maggiori informazioni, consultare la BinaryFormatterguida alla migrazione: Pacchetto compatibilità.

Attenzione

BinaryFormatter è pericoloso e non consigliato perché mette a rischio l'uso di app a rischio di attacchi, ad esempio Denial of Service (DoS), divulgazione di informazioni o esecuzione di codice remoto. Per maggiori informazioni sui rischi BinaryFormatter, consultare la sezione Rischi di deserializzazione in uso di BinaryFormatter e tipi correlati.

Problemi

Se si verifica un comportamento imprevisto con l'applicazione WPF relativa a BinaryFormatter, segnalare un problema in dotnet/wpf/issues e indicare che il problema è correlato alla rimozione di BinaryFormatter.