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.
bool
byte
char
decimal
double
int
sbyte
float
- TimeSpan
- DateTime
uint
string
nint
nuint
long
ulong
short
ushort
- PointF
- RectangleF
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 restituiscefalse
al momento del processo di serializzazione CodeDOM. (Nota: il metodo può avere un ambitoprivate
.) - 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 true
l'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.
Soluzione alternativa alla compatibilità (non consigliata)
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.