Windows Forms guida alla migrazione 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 Windows Forms 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 Windows Forms applicazioni siano interessate, e sarà necessario intervenire per completare la migrazione a .NET 9 o a una versione successiva.

Come BinaryFormatter influisce su Windows Forms

Prima di .NET 9, Windows Forms usato BinaryFormatter per serializzare e deserializzare i dati per scenari quali appunti, trascinamento della selezione e archiviazione o caricamento delle risorse in fase di progettazione. A partire da .NET 9, Windows Forms e WPF usano 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 eccezioni a meno che non vengano eseguiti passaggi di migrazione nell'applicazione.

Windows Forms e le app WPF gestiscono entrambi i tipi seguenti, insieme a matrici ed elenchi di questi tipi. Gli appunti, il trascinamento della selezione e le risorse in fase di progettazione continueranno a funzionare con questi tipi senza alcuna procedura di migrazione necessaria.

Windows Forms supporta anche i tipi aggiuntivi seguenti:

Scenari di OLE

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

Risorse (ResX)

La Windows Forms Progettazione

LaWindows FormsProgettazione out-of-process usa BinaryFormatter internamente anche per la serializzazione e la deserializzazione ResX.

I tipi e le proprietà possono partecipare alla serializzazione senza rendersi conto del comportamento standard della Windows FormsProgettazione. Un modo in cui BinaryFormatter viene usato che potrebbe non essere a conoscenza è quando viene introdotta una public proprietà di un IComponent oggetto e tale proprietà viene popolata o modificata in fase di progettazione. Tale proprietà viene serializzata in file di risorse nelle condizioni seguenti:

  • Una proprietà pubblica contiene dati al momento del salvataggio di un Form in Progettazione.
  • Tale proprietà non è di sola lettura.
  • Tale proprietà non è attribuita a [DesignerSerializationVisibility(false)].
  • Tale proprietà non ha un DefaultValueAttribute.
  • Tale proprietà non dispone di un metodo corrispondente bool ShouldSerialize[PropertyName] che restituisce false al momento del processo di serializzazione CodeDOM. (Nota: il metodo può avere un ambito private.)
  • Tale proprietà è un tipo che non dispone di un DesignerSerializer

Se queste istruzioni sono true, Progettazione determina se il tipo di tale proprietà dispone di un convertitore di tipi. In caso affermativo, Progettazione utilizza il convertitore di tipi per serializzare il contenuto della proprietà. In caso contrario, viene usato BinaryFormatter per serializzare il contenuto nel file di risorse. Windows Forms ha aggiunto analizzatori insieme alle correzioni del codice che consentono di acquisire consapevolezza di questo tipo di comportamento in cui BinaryFormatter la serializzazione potrebbe verificarsi senza la conoscenza dello sviluppatore.

Caricamento della risorsa durante il runtime

I tipi che in precedenza erano stati serializzati in file di risorse tramite BinaryFormatter continueranno a deserializzare come previsto senza la necessità di poiché BinaryFormatter il contenuto dei file ResX sono considerati dati attendibili. Nel raro caso in cui la deserializzazione non possa verificarsi senza BinaryFormatter, può essere aggiunta di nuovo con un pacchetto di compatibilità non supportato. Per informazioni dettagliate, consultare la BinaryFormatterguida alla migrazione: Pacchetto di compatibilità. Si noti che è necessario un passaggio aggiuntivo per impostare System.Resources.Extensions.UseBinaryFormatter il contesto dell'app per truel'uso BinaryFormatter per le risorse.

Eseguire la migrazione da BinaryFormatter

Se i tipi non gestiti intrinsecamente durante la serializzazione e la deserializzazione vengono usati negli scenari interessati, è necessario intervenire per completare la migrazione a .NET 9 o a una versione successiva.

Scenari di OLE

Consultare le Windows FormsLinee guida OLE BinaryFormatterdi Windows Presentation Foundation per maggiori informazioni su come eseguire la migrazione da BinaryFormatter in scenari come appunti e trascinamento della selezione.

Caricamento e salvataggio delle risorse durante la fase di progettazione

Per i tipi che non vengono gestiti intrinsecamente durante la serializzazione in risorse, ad esempio nel caso di Progettazione con scenari ResX, il modo previsto per eseguire la migrazione da BinaryFormatter consiste nel garantire che sia registrato un TypeConverter oggetto per il tipo o la proprietà che partecipa alla serializzazione. In questo modo, durante la serializzazione e la deserializzazione, viene utilizzato TypeConverter al posto di dove veniva usato una volta BinaryFormatter. Per maggiori informazioni sull'implementazione di un convertitore di tipi, consultare la sezione TypeConverter Classe.

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'app Windows Forms per quanto riguarda BinaryFormatter la serializzazione o la deserializzazione, segnalare un problema in github.com/dotnet/winforms e indicare che il problema è correlato alla rimozione di BinaryFormatter.