Compartir a través de


Guía de migración de Windows Presentation Foundation (WPF) para BinaryFormatter

Eliminación de BinaryFormatter

A partir de .NET 9, BinaryFormatter ya no se admite debido a sus riesgos de seguridad conocidos y sus API siempre arrojan una PlatformNotSupportedException para todos los tipos de proyectos, incluidas las aplicaciones WPF. Para obtener más información sobre los riesgos de BinaryFormatter y el motivo de su eliminación, consulte la Guía de migración de BinaryFormatter.

Con la eliminación de BinaryFormatter, se espera que muchas aplicaciones de WPF se vean afectadas y tendrá que tomar medidas para completar la migración a .NET 9 o una versión posterior.

Cómo BinaryFormatter afecta a WPF

Antes de .NET 9, Windows Presentation Foundation (WPF) usaba BinaryFormatter para serializar y deserializar datos en escenarios como portapapeles, arrastrar y colocar, y cargar o almacenar el estado en diario. A partir de .NET 9, WPF y Windows Forms usan un subconjunto de la implementación BinaryFormatter internamente para estos escenarios. Aunque los riesgos de BinaryFormatter no se pueden abordar en la serialización o deserialización de uso general, se han adoptado medidas para mitigar los riesgos en estos casos de uso muy específicos con un conjunto conocido de tipos. Sigue habiendo hay una reserva de BinaryFormatter para los tipos desconocidos o no admitidos, lo que generará una PlatformNotSupportedException a menos que se realicen pasos de migración en la aplicación.

WPF y las aplicaciones WinForms controlan los siguientes tipos, junto con matrices y listas de estos tipos. El Portapapeles, la arrastrar y colocar y el enlace de Avalon en el diario seguirán funcionando con estos tipos sin necesidad de realizar los pasos de migración.

Escenarios OLE

Para obtener información sobre los efectos que la eliminación de BinaryFormatter tiene en escenarios OLE, como portapapeles y arrastrar y colocar, así como instrucciones de migración, consulte Windows Forms y Windows Presentation Foundation BinaryFormatter instrucciones OLE.

Puede hacer referencia a la función en la que hemos usado BinaryFormatter como reversión para leer o guardar objeto para controlar: SaveObjectToHandle y ReadObjectFromHandle para escenarios OLE

Registro en el diario

En caso de que necesitemos almacenar o cargar un estado al administrar el historial de navegación en WPF.

Para cargar o guardar, llamamos a LoadSubStreams/ SaveSubStreams de clase DataStream. Si el elemento usado en no parte del tipo de conocimiento controlado por la nueva implementación, usará BinaryFormatter.

Cuando un desarrollador navega por JournalEntry mediante Navigate, GoForwardo GoBack, los datos del nodo se cargan o guardan en una secuencia para guardar el estado. Si el tipo implicado no se controla intrínsecamente durante la serialización o deserialización, se usa BinaryFormatter.

Referencia: DataStream.cs

Los usuarios de .NET 9 que no pueden migrar desde BinaryFormatter pueden instalar un paquete de compatibilidad no compatible. Para obtener más información, consulte la Guía de migración de BinaryFormatter: Paquete de compatibilidad.

Precaución

BinaryFormatter es peligroso y no se recomienda, ya que pone en riesgo el consumo de aplicaciones en riesgo de ataques como denegación de servicio (DoS), divulgación de información o ejecución remota de código. Para obtener más información sobre los riesgos de BinaryFormatter, consulte Riesgos de deserialización en el uso de BinaryFormatter y tipos relacionados.

Problemas

Si experimenta un comportamiento inesperado con la aplicación WPF con respecto a BinaryFormatter, registre un problema en dotnet/wpf/issues e indique que el problema está relacionado con la eliminación de BinaryFormatter.