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.
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 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
, 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 manipulado durante a serialização/desserialização, BinaryFormatter será usado.
Referência: DataStream.cs
Solução alternativa de compatibilidade (não recomendado)
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.