Partilhar via


As APIs de serialização BinaryFormatter produzem erros do compilador

Como parte do plano de descontinuação a longo prazo da BinaryFormatter, continuamos a eliminar BinaryFormatter funcionalidades das nossas bibliotecas e a afastar os programadores do tipo. A partir do .NET 7, as chamadas para as seguintes APIs produzem erros em tempo de compilação em todos os tipos de projeto C# e Visual Basic:

Comportamento anterior

Desde o .NET 5, o uso dos métodos afetados Serialize e Deserialize produziu um aviso do compilador com ID SYSLIB0011. Para obter mais informações, consulte BinaryFormatter métodos de serialização são obsoletos e proibidos em aplicativos ASP.NET (.NET 5).

O uso do Exception.SerializeObjectState evento não produziu um erro.

Novo comportamento

A partir do .NET 7, o uso de qualquer uma das APIs afetadas no código produz um erro de compilador com a mesma ID, SYSLIB0011. O seu projeto será afetado se cumprir todos os seguintes critérios:

  • É um projeto C# ou Visual Basic.
  • Tem como alvo net7.0 ou superior.
  • Ele chama diretamente uma das APIs afetadas.
  • Ainda não está suprimindo o SYSLIB0011 código de aviso.

Versão introduzida

.NET 7

Tipo de mudança de rutura

Essa alteração pode afetar a compatibilidade da fonte.

Razão para a alteração

Como parte do plano de descontinuação a longo prazo da BinaryFormatter, continuamos a eliminar BinaryFormatter funcionalidades das nossas bibliotecas e a afastar os programadores do tipo.

O melhor curso de ação é migrar devido às suas falhas de BinaryFormatter segurança e confiabilidade. BinaryFormatter pode ser removido do .NET em uma versão futura. A equipe de bibliotecas do .NET já adotou uma posição de que tipos recentes, como System.Half e System.DateOnly não serão compatíveis com o BinaryFormatter.

Se tiver de suprimir os erros, pode fazê-lo seguindo as orientações do artigo original sobre obsolescência. Você também pode desabilitar o erro em todo o projeto definindo uma propriedade de projeto que converte o erro de volta em um aviso (para corresponder ao comportamento do .NET 5/6).

Aviso

Definir essa propriedade pode alterar o comportamento do host. Consulte <EnableUnsafeBinaryFormatterSerialization> propriedade.

<PropertyGroup>
    ...
    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

Nota

Se o seu projeto compilar com "avisos como erros" ativados, a compilação ainda falhará. (Isso corresponde ao comportamento fornecido nos SDKs do .NET 5 e do .NET 6.) Se esse for o caso, você ainda precisará suprimir o SYSLIB0011 aviso no código-fonte ou no elemento do arquivo de <NoWarn> projeto.

<EnableUnsafeBinaryFormatterSerialization> propriedade

A <EnableUnsafeBinaryFormatterSerialization propriedade foi introduzida no .NET 5. Com o .NET 7, o comportamento dessa opção foi alterado para controlar a compilação e o comportamento em tempo de execução do host . O significado dessa opção difere com base no tipo de projeto, conforme descrito na tabela a seguir.

Tipo de projeto Propriedade definida como true Propriedade definida como false Propriedade omitida
Biblioteca/componentecompartilhado 1 As APIs afetadas estão obsoletas como aviso. A compilação será bem-sucedida, a menos que você tenha "avisos como erros" ativados para seu aplicativo ou tenha suprimido o SYSLIB0011 código de aviso. As APIs afetadas são obsoletas como erro, e as chamadas do seu código para essas APIs falharão em tempo de compilação, a menos que o erro seja suprimido. (O mesmo que para false.)
AplicativosBlazor e MAUI 2 As chamadas para BinaryFormatter falharão em tempo de execução. As chamadas para BinaryFormatter falharão em tempo de execução. As chamadas para BinaryFormatter falharão em tempo de execução.
Aplicação ASP.NET As APIs afetadas estão obsoletas como aviso. A compilação será bem-sucedida, a menos que você tenha "avisos como erros" ativados para seu aplicativo ou tenha suprimido o SYSLIB0011 código de aviso. O tempo de execução permitirá chamadas para BinaryFormatter, independentemente de a chamada ser originada do seu código ou de uma dependência que você consome. As APIs afetadas são obsoletas como erro, e as chamadas do seu código para essas APIs falharão em tempo de compilação, a menos que o erro seja suprimido. O tempo de execução proibirá chamadas para BinaryFormatter, independentemente de a chamada ser originada do seu código ou de uma dependência que você consome. (O mesmo que para false.)
Aplicações de ambiente de trabalho e todos os outros tipos de aplicações As APIs afetadas estão obsoletas como aviso. A compilação será bem-sucedida, a menos que você tenha "avisos como erros" ativados para seu aplicativo ou tenha suprimido o SYSLIB0011 código de aviso. O tempo de execução permitirá chamadas para BinaryFormatter, independentemente de a chamada ser originada do seu código ou de uma dependência que você consome. As APIs afetadas são obsoletas como erro, e as chamadas do seu código para essas APIs falharão em tempo de compilação, a menos que o erro seja suprimido. O tempo de execução proibirá chamadas para BinaryFormatter, independentemente de a chamada ser originada do seu código ou de uma dependência que você consome. As APIs afetadas são obsoletas como erro, e as chamadas do seu código para essas APIs falharão em tempo de compilação, a menos que o erro seja suprimido. O tempo de execução permitirá chamadas para BinaryFormatter, independentemente de a chamada ser originada do seu código ou de uma dependência que você consome.

1 A política de tempo de execução é controlada pelo host do aplicativo. As chamadas para BinaryFormatter ainda podem falhar em tempo de execução, mesmo que <EnableUnsafeBinaryFormatterSerialization> estejam definidas como true dentro do arquivo de projeto da biblioteca. As bibliotecas não podem substituir a política de tempo de execução do host do aplicativo.

2 Os tempos de execução Blazor e MAUI proíbem chamadas para BinaryFormatter. Independentemente de qualquer valor definido para <EnableUnsafeBinaryFormatterSerialization>, as chamadas falharão em tempo de execução. Não chame essas APIs de aplicativos Blazor ou MAUI ou de bibliotecas destinadas a serem consumidas por aplicativos Blazor ou MAUI.

APIs afetadas

Consulte também