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:
- System.Exception.SerializeObjectState evento
- BinaryFormatter.Serialize método
- BinaryFormatter.Deserialize método
- Formatter.Serialize(Stream, Object) método
- Formatter.Deserialize(Stream) método
- IFormatter.Serialize(Stream, Object) método
- IFormatter.Deserialize(Stream) método
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.
Ação recomendada
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
- System.Exception.SerializeObjectState
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
- System.Runtime.Serialization.Formatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatter.Deserialize(Stream)
- System.Runtime.Serialization.IFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.IFormatter.Deserialize(Stream)