Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 Windows Forms aplicativos. Para obter mais informações sobre os riscos BinaryFormatter apresentados e o motivo de sua remoção, consulte o guiaBinaryFormatter migração.
Com BinaryFormattera remoção do , espera-se que muitos Windows Forms 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 Windows Forms
Antes do .NET 9, Windows Forms foi usado BinaryFormatter para serializar e desserializar dados para cenários como área de transferência, arrastar e soltar, e armazenar ou carregar recursos em tempo de concepção. A partir do .NET 9 e do WPF, Windows Forms 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á exceções, a menos que as etapas de migração sejam executadas no aplicativo.
Windows Forms e aplicativos WPF ambos lidam com os seguintes tipos, juntamente com matrizes e listas desses tipos. Os recursos de área de transferência, arrastar e soltar e tempo de design continuarão a funcionar com esses tipos sem a necessidade de etapas de migração.
boolbytechardecimaldoubleintsbytefloat- TimeSpan
- DateTime
uintstringnintnuintlongulongshortushort- PointF
- RectangleF
Windows Forms também suporta os seguintes tipos adicionais:
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 Windows Forms OLE do Windows Presentation FoundationBinaryFormatter.
Recursos (ResX)
O Windows Forms Designer
O Windows Forms Out-Of-Process Designer também usa BinaryFormatter internamente para serialização e desserialização do ResX.
Tipos e propriedades podem participar da serialização sem que você perceba devido ao comportamento padrão do Windows Forms Designer. Uma maneira usada que BinaryFormatter você pode não estar ciente é quando uma public propriedade em um IComponent é introduzida e essa propriedade é preenchida ou editada em tempo de design. Essa propriedade é serializada em arquivos de recursos nas seguintes condições:
- Uma propriedade pública contém dados no momento em que um Form no Designer é salvo.
- Essa propriedade não é somente leitura.
- Essa propriedade não é atribuída com
[DesignerSerializationVisibility(false)]. - Essa propriedade não tem um DefaultValueAttributearquivo .
- Essa propriedade não tem um respetivo
bool ShouldSerialize[PropertyName]método que retornafalseno momento do processo de serialização CodeDOM. (Nota: o método pode terprivateescopo.) - Essa propriedade é um tipo que não tem um DesignerSerializer
Se essas instruções forem verdadeiras, o Designer determinará se o tipo dessa propriedade tem um conversor de tipo. Se isso acontecer, o Designer usará o conversor de tipo para serializar o conteúdo da propriedade. Caso contrário, ele usa BinaryFormatter para serializar o conteúdo no arquivo de recurso. Windows Forms adicionou analisadores juntamente com correções de código para ajudar a chamar a atenção para esse tipo de comportamento em que BinaryFormatter a serialização pode estar ocorrendo sem o conhecimento do desenvolvedor.
Carregando recurso durante o tempo de execução
Os tipos que foram serializados anteriormente em arquivos de recursos continuarão BinaryFormatter a desserializar conforme o esperado, sem a necessidade BinaryFormatter de como o conteúdo dos arquivos ResX são considerados dados confiáveis. No caso raro em que a desserialização não pode ocorrer sem BinaryFormatter, ela pode ser adicionada novamente com um pacote de compatibilidade sem suporte. Consulte o BinaryFormatter guia de migração: Pacote de compatibilidade para obter detalhes. Observe que uma etapa extra de configuração System.Resources.Extensions.UseBinaryFormatter da mudança de contexto do aplicativo para true é necessária para usar BinaryFormatter para recursos.
Gerando arquivos de recursos via MSBuild
Quando você gera arquivos de recursos via MSBuild, você pode encontrar um MSB3825 erro. Este erro especifica que os seus recursos formatados em binário podem ser desserializados durante o tempo de execução BinaryFormatter. O aviso está sendo removido das compilações destinadas ao .NET 9 e posteriores, no entanto, a remoção ainda não foi concluída em todas as versões do .NET 9. O aviso deve ser motivo de preocupação apenas ao direcionar o .NET 8 e inferior. Como referido anteriormente, estes recursos não serão desserializados utilizando BinaryFormatter durante a execução no .NET 9 e versões posteriores. Você pode desativar o aviso definindo a propriedade GenerateResourceWarnOnBinaryFormatterUse como false. Em casos raros em que a desserialização não pode ocorrer sem BinaryFormattero , ele pode ser adicionado novamente com um pacote de compatibilidade sem suporte. Para obter mais informações, consulte BinaryFormatter Guia de migração: Pacote de compatibilidade. Observe que uma etapa adicional de configuração da mudança de contexto do System.Resources.Extensions.UseBinaryFormatter aplicativo para true é necessária para usar BinaryFormatter para recursos.
Migrar de BinaryFormatter
Se os tipos que não são intrinsecamente manipulados durante a serialização e desserialização forem usados nos cenários afetados, você precisará tomar medidas para concluir a migração para o .NET 9 ou uma versão posterior.
Cenários OLE
Consulte Windows Forms OLE do Windows Presentation Foundation BinaryFormatter para obter mais informações sobre como migrar para fora em cenários como área de transferência e arrastar e soltar.
Carregando e economizando recursos durante o tempo de projeto
Para tipos que não são intrinsecamente manipulados durante a serialização em recursos, como no caso dos cenários Designer com ResX, a maneira prescrita de migrar é BinaryFormatter garantir que a TypeConverter seja registrada para o tipo ou propriedade que está participando da serialização. Desta forma, durante a serialização e desserialização, o TypeConverter é usado em vez de onde BinaryFormatter foi usado uma vez. Para obter mais informações sobre como implementar um conversor de tipo, consulte TypeConverter Classe.
Solução alternativa de compatibilidade (não recomendada)
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 tiveres um comportamento inesperado com a tua Windows Forms aplicação em relação à BinaryFormatter serialização ou desserialização, submete uma questão em github.com/dotnet/winforms e refira que o problema está relacionado com a remoção do BinaryFormatter.