Partilhar via


Guia de migração do Windows Presentation Foundation(WPF) para BinaryFormatter

BinaryFormatter remoção

A partir do .NET 9, BinaryFormatter não há mais suporte devido aos seus riscos de segurança conhecidos e suas APIs sempre lançam um PlatformNotSupportedException para todos os tipos de projeto, incluindo WPF aplicativos. Para obter mais informações sobre os riscos BinaryFormatter apresentados e o motivo de sua remoção, consulte o guia de BinaryFormatter migração.

Com BinaryFormattera remoção do , espera-se que muitos WPF aplicativos sejam afetados e você precisará tomar medidas para concluir sua migração para o .NET 9 ou uma versão posterior.

Como BinaryFormatter afeta WPF

Antes do .NET 9, o Windows Presentation Foundation (WPF) era usado BinaryFormatter para serializar e desserializar dados para cenários como área de transferência, arrastar e soltar e estado de carregamento/armazenamento no Diário. A partir do .NET 9 e do Windows Forms, WPF use um subconjunto da BinaryFormatter implementação internamente para esses cenários. Embora BinaryFormatteros riscos do não possam ser abordados na serialização/desserialização de uso geral, medidas foram tomadas para mitigar os riscos nesses casos de uso muito específicos com um conjunto conhecido de tipos. Um fall-back para BinaryFormatter ainda está em vigor para tipos desconhecidos ou sem suporte, o que lançará um PlatformNotSupportedException a menos que as etapas de migração sejam tomadas no aplicativo.

WPF e os aplicativos WinForms lidam com os seguintes tipos, juntamente com matrizes e listas desses tipos. A área de transferência, o recurso de arrastar e soltar e o Avalon Binding in Journal continuarão a funcionar com esses tipos sem a necessidade de etapas de migração.

Cenários OLE

Para obter informações sobre os efeitos BinaryFormatter que a remoção tem em cenários OLE, como área de transferência e arrastar e soltar, bem como diretrizes de migração, consulte Diretrizes OLE do Windows Forms e Windows Presentation FoundationBinaryFormatter.

Você pode consultar a função onde usamos BinaryFormatter como fallback para ler/salvar objeto para manipular: SaveObjectToHandle e ReadObjectFromHandle para cenários OLE

Registro no diário

No caso em que precisamos armazenar ou carregar um estado enquanto gerenciamos o histórico de navegação no WPF.

Para carregar/salvar, chamamos LoadSubStreams/ SaveSubStreams da DataStream classe. Se o elemento usado em não parte do tipo know manipulado pela nova implementação, ele usará BinaryFormatter.

Quando um desenvolvedor navega pelo JournalEntry usando Navigate, GoForwardou GoBack, os dados do nó são carregados ou salvos em um fluxo para salvar o estado. Se o tipo envolvido não for intrinsecamente manipulado durante a serialização/desserialização, BinaryFormatter será usado.

Referência: DataStream.cs

Os usuários do .NET 9 que não podem migrar podem instalar um pacote de BinaryFormatter compatibilidade sem suporte. Para obter mais informações, consulte BinaryFormatter Guia de migração: Pacote de compatibilidade.

Atenção

BinaryFormatter é perigoso e não é recomendado, pois coloca o consumo de aplicativos em risco de ataques, como negação de serviço (DoS), divulgação de informações ou execução remota de código. Para obter mais informações sobre os riscos BinaryFormatter representados, consulte Riscos de desserialização em uso e BinaryFormatter tipos relacionados.

Problemas

Se você tiver um comportamento inesperado com seu WPF aplicativo em relação ao BinaryFormatter, registre um problema em dotnet/wpf/issues e indique que o problema está relacionado à remoção do BinaryFormatter.