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.
Como parte do plano de descontinuação a longo prazo da BinaryFormatter, continuamos a eliminar funcionalidade das nossas bibliotecas e a incentivar os programadores a afastar-se 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:
- evento System.Exception.SerializeObjectState
- 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 os métodos de serialização do BinaryFormatter são obsoletos e proibidos nos 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.0ou superior. - Ele chama diretamente uma das APIs afetadas.
- Ainda não está suprimindo o
SYSLIB0011código de aviso.
Versão introduzida
.NET 7
Tipo de mudança disruptiva
Essa alteração pode afetar compatibilidade da fonte.
Motivo da mudança
Como parte do plano de descontinuação a longo prazo da BinaryFormatter, continuamos a eliminar funcionalidade das nossas bibliotecas e a incentivar os programadores a afastar-se do tipo.
Ação recomendada
O melhor curso de ação é migrar para longe de BinaryFormatter devido às suas falhas de 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).
Advertência
Definir essa propriedade pode alterar o comportamento do host. Ver <EnableUnsafeBinaryFormatterSerialization> propriedade.
<PropertyGroup>
...
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
Observação
Se o seu projeto for compilado com "advertências como erros" ativadas, 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 deste switch mudou para controlar tanto a compilação como o comportamento de runtime 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/componente compartilhado1 | As APIs afetadas estão obsoletas e servem 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.) |
| Aplicativos Blazor e MAUI2 | Chamadas para BinaryFormatter falham em tempo de execução. |
Chamadas para BinaryFormatter falham em tempo de execução. |
Chamadas para BinaryFormatter falham em tempo de execução. |
| Aplicação ASP.NET | As APIs afetadas estão obsoletas e servem 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 e servem 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 podem ainda falhar em tempo de execução, mesmo que <EnableUnsafeBinaryFormatterSerialization> esteja definido como true no ficheiro de projeto da tua biblioteca. As bibliotecas não podem substituir a política de tempo de execução do host do aplicativo.
2Os tempos de execução Blazor e MAUI proíbem chamadas para BinaryFormatter. Independentemente do valor que definas para <EnableUnsafeBinaryFormatterSerialization>, as chamadas falham 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)