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.
Atenção
Recomendamos vivamente que não utilize BinaryFormatter devido aos riscos de segurança associados. Os usuários existentes devem migrar do BinaryFormatter.
A partir do .NET 9, deixámos de incluir uma implementação de BinaryFormatter no runtime. As APIs ainda estão presentes, mas sua implementação sempre lança um PlatformNotSupportedException, independentemente do tipo de projeto. Portanto, definir o sinalizador de compatibilidade com versões anteriores existente não é mais suficiente para usar BinaryFormatter.
Você tem duas opções para resolver isso:
Migrar para longe de BinaryFormatter. Recomendamos vivamente que investigue as opções para parar de utilizar BinaryFormatter devido aos riscos de segurança associados. Listamos várias opções abaixo.
continue a utilizar BinaryFormatter Se você precisar continuar usando BinaryFormatter no .NET 9, precisará depender do System.Runtime.Serialization. sem suporte Formatters pacote NuGet, que substitui a implementação de lançamento.
Qual é o risco em usar BinaryFormatter?
Qualquer desserializador, binário ou de texto, que permita que a sua entrada contenha informações sobre os objetos a serem criados é um problema de segurança iminente. Há uma enumeração de fraqueza comum (CWE) que descreve o problema: CWE-502 "Desserialização de dados não confiáveis". BinaryFormatter, incluído na versão inicial do .NET Framework em 2002, é um desserializador. Também abordamos isso no guia de segurança BinaryForalter.
Devido aos riscos conhecidos do uso de BinaryFormatter, a funcionalidade foi excluída do .NET Core 1.0. Mas sem um caminho de migração claro para usar algo mais seguro, a demanda do cliente levou à BinaryFormatter inclusão no .NET Core 2.0. Desde então, a equipa do .NET tem seguido o caminho para remover BinaryFormatter, desativando-o lentamente por padrão em vários tipos de projeto, mas permitindo que os consumidores optem por ativá-lo através de flags se ainda forem necessários para compatibilidade com versões anteriores.
Para obter mais detalhes sobre a decisão, consulte o anúncio de que BinaryFormatter será removido na versão .NET 9.
Se tiver problemas relacionados à remoção de BinaryFormatter não abordados neste guia de migração, reporte um problema em github.com/dotnet/runtime e indique que o problema está relacionado à remoção de BinaryFormatter.
Tópicos de migração
Migrar de BinaryFormatter geralmente significa escolher um serializador diferente. No entanto, isso geralmente só é possível se você controlar o produtor e o consumidor dos dados codificados. Caso não controle o produtor, pode também utilizar a nossa nova API para ler BinaryFormatter cargas úteis sem instanciar nenhum dos tipos codificados.
Ambas as opções são exploradas a seguir.
Escolha um serializador
A primeira etapa da migração de BinaryFormatter é escolher um serializador para substituir. Dependendo de suas necessidades específicas, a equipe do .NET recomenda migrações para quatro serializadores diferentes.
- Migrar para System.Text.Json (JSON)
- Migrar para DataContractSerializer (XML)
- Migrar para o MessagePack (binário)
- Migrar para protobuf-net (binário)
Leitura BinaryFormatter de cargas úteis (NRBF)
Muitos aplicativos carregam e desserializam cargas úteis que foram persistidas no armazenamento e nem sempre é possível transformar todas as cargas úteis persistentes antecipadamente. Outros cenários podem envolver sistemas ou serviços que recebem dados produzidos pela BinaryFormatter, onde esses sistemas precisam ser migrados de forma independente.
Nestes e noutros cenários, torna-se necessário manter o suporte para a leitura das cargas úteis fornecidas e fazer a transição para um novo formato ao longo do tempo. Para atender a essas necessidades, agora é possível ler com segurança cargas úteis NRBF criadas com BinaryFormatter sem executar desserialização de uso geral e vulnerável.
Migrar aplicativos Windows Forms e WPF
Os aplicativos Windows Forms e WPF podem exigir alterações adicionais. Consulte Aplicativos do Windows Forms, aplicativos WPF e orientação de arrastar e arrastar e soltar da área de transferência WinForms/WPF para obter mais orientações sobre migração.
Migrar recursos gerenciados (ResX)
Os tipos de recursos mais comuns (como cadeias de caracteres e ícones) funcionarão sem BinaryFormatter. Para tipos personalizados, você precisa incluir BinaryFormatter e habilitar uma opção de compatibilidade, consulte Carregando recurso durante o tempo de execução.
Use o pacote de compatibilidade
Para cenários em que uma migração a partir de BinaryFormatter não pode ser realizada no momento da atualização para o .NET 9, está disponível um pacote de compatibilidade não suportada. O pacote NuGet System.Runtime.Serialization.Formatters contém a implementação funcional de BinaryFormatter, incluindo as suas vulnerabilidades e riscos.
Embora não seja suportado e não recomendado, o guia para usar o pacote de compatibilidade inclui os detalhes para instalar o pacote e habilitar a funcionalidade.
Atenção
Recomendamos vivamente que não utilize BinaryFormatter devido aos riscos de segurança associados. Os usuários existentes devem migrar do BinaryFormatter.