Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Como parte do plano de substituição de longo prazo do BinaryFormatter, continuamos a eliminar a funcionalidade BinaryFormatter de nossas bibliotecas e a acostumar os desenvolvedores a esquecer o tipo. A partir do .NET 7, as chamadas para as seguintes APIs produzem erros de tempo de compilação em todos os tipos de projeto do C# e do Visual Basic:
- Evento System.Exception.SerializeObjectState
- método 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)
Comportamento anterior
Desde o .NET 5, o uso dos métodos afetados Serialize e Deserialize produziu um aviso do compilador com a ID SYSLIB0011. Para obter mais informações, consulte Os métodos de serialização BinaryFormatter são obsoletos e proibidos em aplicativos de 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 do compilador com a mesma ID SYSLIB0011. Seu projeto será afetado se atender a todos os seguintes critérios:
- É um projeto C# ou Visual Basic.
- Tem como destino o
net7.0ou superior. - Ele chama diretamente uma das APIs afetadas.
- Ele ainda não está suprimindo o código de aviso
SYSLIB0011.
Versão introduzida
.NET 7
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade da origem.
Motivo da alteração
Como parte do plano de substituição de longo prazo do BinaryFormatter, continuamos a eliminar a funcionalidade BinaryFormatter de nossas bibliotecas e a acostumar os desenvolvedores a esquecer o tipo.
Ação recomendada
O melhor curso de ação é migrar para fora 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á tomou uma posição de que tipos recentes como System.Half e System.DateOnly não serão compatíveis com BinaryFormatter.
Se você precisar suprimir os erros, poderá fazer isso seguindo as diretrizes no artigo original de 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> a propriedade.
<PropertyGroup>
...
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
Observação
Se o projeto for compilado com a opção “avisos como erros” habilitada, a compilação continuará falhando. (Isso corresponde ao comportamento distribuído nos SDKs do .NET 5 e do .NET 6.) Nesse caso, você ainda precisará suprimir o aviso na origem SYSLIB0011 ou no elemento <NoWarn> do arquivo do projeto.
Propriedade <EnableUnsafeBinaryFormatterSerialization>
A <EnableUnsafeBinaryFormatterSerialization propriedade foi introduzida no .NET 5. Com o .NET 7, o comportamento dessa alternativa foi alterado para controlar tanto a compilação quanto o comportamento do tempo de execução do host. O significado dessa opção é diferente 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 são obsoletas como aviso. A compilação terá êxito, a menos que a opção “avisos como erros” esteja habilitada para seu aplicativo ou que você tenha suprimido o código de aviso SYSLIB0011. |
As APIs afetadas são obsoletas como erro e as chamadas do código para essas APIs falharão no momento da compilação, a menos que o erro seja suprimido. | (O mesmo que para false.) |
| Aplicativos Blazor e MAUI2 | 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 durante o tempo de execução. |
| Aplicativo do ASP.NET | As APIs afetadas são obsoletas como aviso. A compilação terá êxito, a menos que a opção “avisos como erros” esteja habilitada para seu aplicativo ou que você tenha suprimido o código de aviso SYSLIB0011. O runtime permitirá chamadas para BinaryFormatter, independentemente de a chamada se originar do seu código ou de uma dependência que você consome. |
As APIs afetadas são obsoletas como erro e as chamadas do código para essas APIs falharão no momento da compilação, a menos que o erro seja suprimido. O tempo de execução proibirá chamadas para BinaryFormatter, independentemente de a chamada ter origem no seu código ou em uma dependência que você consome. |
(O mesmo que para false.) |
| Aplicativos de desktop e todos os outros tipos de aplicativos | As APIs afetadas são obsoletas como aviso. A compilação terá êxito, a menos que a opção “avisos como erros” esteja habilitada para seu aplicativo ou que você tenha suprimido o código de aviso SYSLIB0011. O runtime permitirá chamadas para BinaryFormatter, independentemente de a chamada se originar do seu código ou de uma dependência que você consome. |
As APIs afetadas são obsoletas como erro e as chamadas do código para essas APIs falharão no momento da compilação, a menos que o erro seja suprimido. O tempo de execução proibirá chamadas para BinaryFormatter, independentemente de a chamada ter origem no seu código ou em uma dependência que você consome. |
As APIs afetadas são obsoletas como erro e as chamadas do código para essas APIs falharão no momento da compilação, a menos que o erro seja suprimido. O runtime permitirá chamadas para BinaryFormatter, independentemente de a chamada se originar do seu código ou de uma dependência que você consome. |
1A política de runtime é controlada pelo host do aplicativo. As chamadas BinaryFormatter ainda poderão falhar no runtime, mesmo que <EnableUnsafeBinaryFormatterSerialization> esteja definida no true arquivo de projeto da biblioteca. As bibliotecas não podem substituir a política de runtime do host do aplicativo.
2Os runtimes do Blazor e MAUI proíbem chamadas para BinaryFormatter. Independentemente de qualquer valor que você definir para <EnableUnsafeBinaryFormatterSerialization>, as chamadas falharão durante a 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)