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.
Serialize e Deserialize métodos em BinaryFormatter, Formattere IFormatter agora estão obsoletos como aviso. Além disso, BinaryFormatter a serialização é proibida por padrão para aplicativos ASP.NET.
Observação
No .NET 7, as APIs afetadas são obsoletas como erro. Para obter mais informações, consulte APIs de serialização BinaryFormatter produzem erros do compilador.
Alterar descrição
Devido a vulnerabilidades de segurança no BinaryFormatter, os seguintes métodos estão agora obsoletos e produzem um aviso em tempo de compilação com ID SYSLIB0011. Além disso, no ASP.NET Core 5.0 e versões posteriores, lançarão um NotSupportedException, a menos que a aplicação web tenha reativado a funcionalidade BinaryFormatter.
Os seguintes métodos de serialização também são obsoletos e produzem aviso SYSLIB0011, mas não têm alterações comportamentais:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Versão introduzida
5.0
Motivo da mudança
Esses métodos são marcados como obsoletos como parte de um esforço para reduzir o uso de BinaryFormatter dentro do ecossistema .NET.
Ação recomendada
Pare de usar BinaryFormatter no seu código. Em vez disso, considere usar JsonSerializer ou XmlSerializer. Para obter mais informações, consulte BinaryFormatter security guide.
Você pode suprimir temporariamente o aviso de tempo de BinaryFormatter compilação, que é
SYSLIB0011. Recomendamos que você avalie cuidadosamente seu código quanto aos riscos antes de escolher essa opção. A maneira mais fácil de suprimir os avisos é cercar o local de chamada individual com diretivas#pragma.// Now read the purchase order back from disk using (var readStream = new FileStream("myfile.bin", FileMode.Open)) { var formatter = new BinaryFormatter(); #pragma warning disable SYSLIB0011 return (PurchaseOrder)formatter.Deserialize(readStream); #pragma warning restore SYSLIB0011 }Você também pode suprimir o aviso no arquivo de projeto.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>Se você suprimir o aviso no arquivo de projeto, o aviso será suprimido para todos os arquivos de código no projeto. A supressão
SYSLIB0011não suprime avisos causados pelo uso de outras APIs obsoletas.Para continuar a usar BinaryFormatter em aplicativos ASP.NET, você pode reativá-lo no arquivo de projeto. No entanto, é altamente recomendável não fazer isso. Para obter mais informações, consulte BinaryFormatter security guide.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Para obter mais informações sobre as ações recomendadas, consulte Resolução de erros de obsolescência e desativação do BinaryFormatter.
APIs afetadas
- 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)