Guia de migração do Windows Presentation Foundation (WPF) para BinaryFormatter
Remoção de BinaryFormatter.
A partir do .NET 9, BinaryFormatter não há mais suporte devido aos riscos de segurança conhecidos e suas APIs sempre lançam um PlatformNotSupportedException para todos os tipos de projeto, incluindo aplicativos WPF. Para obter mais informações sobre os riscos do BinaryFormatter e o motivo de sua remoção, consulte o Guia de migração BinaryFormatter.
Com a remoção do BinaryFormatter, espera-se que muitos aplicativos WPF sejam afetados, e você precisará tomar medidas para concluir sua migração para o .NET 9 ou uma versão posterior.
Como o BinaryFormatter afeta o WPF
Antes do .NET 9, o Windows Presentation Foundation (WPF) usava BinaryFormatter para serializar e desserializar dados para cenários como área de transferência, arrastar e soltar e carregar/armazenar estado no Diário. A partir do .NET 9, o WPF e o Windows Forms usam um subconjunto da implementação do BinaryFormatter internamente para esses cenários. Embora os riscos de BinaryFormatter não possam ser tratados na serialização/desserialização de uso geral, foram tomadas medidas para atenuar os riscos nesses casos de uso muito específicos com um conjunto conhecido de tipos. Um fallback para BinaryFormatter ainda está em vigor para tipos desconhecidos ou sem suporte, o que gerará um PlatformNotSupportedException a menos que as etapas de migração sejam executadas no aplicativo.
Aplicativos WinForms e WPF lidam com os seguintes tipos, juntamente com matrizes e listas desses tipos. A área de transferência, arrastar e soltar, e a Avalon Binding no Diário continuarão a funcionar com esses tipos sem a necessidade de etapas de migração.
bool
byte
char
decimal
double
int
sbyte
float
- TimeSpan
- DateTime
uint
string
nint
nuint
long
ulong
short
ushort
- PointF
- RectangleF
Cenários OLE
Para obter informações sobre os efeitos BinaryFormatter da remoção em cenários OLE como área de transferência e arrastar e soltar, bem como diretrizes de migração, consulte Windows Forms e Windows Presentation Foundation BinaryFormatter Diretrizes OLE.
Você pode se referir à função em que usamos BinaryFormatter como fallback para ler/salvar o 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 em WPF.
Para carregar/salvar, chamamos LoadSubStreams/ SaveSubStreams da classe DataStream
. Se o elemento usado não fizer parte de um tipo conhecido tratado pela nova implementação, ele usará BinaryFormatter.
Quando um desenvolvedor navega por JournalEntry usando Navigate
, GoForward
, ou 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 tratado durante a serialização/desserialização, BinaryFormatter será usado.
Ref: DataStream.cs
Solução alternativa de compatibilidade (Não Recomendada)
Os usuários do .NET 9 que não conseguem migrar do BinaryFormatter podem instalar um pacote de compatibilidade sem suporte. Para obter mais informações, consulte o BinaryFormatter Guia de migração: Pacote de Compatibilidade.
Cuidado
O BinaryFormatter é perigoso e não recomendado, pois coloca em risco o consumo de aplicativos para 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 do BinaryFormatter, consulte Riscos de desserialização no uso de tipos BinaryFormatter e relacionados.
Problemas
Se você experimentar um comportamento inesperado com seu WPF aplicativo em relação a BinaryFormatter, registre o problema em dotnet/wpf/issues e indique que o problema está relacionado à remoção de BinaryFormatter.