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.
Os métodos Serialize e Deserialize em BinaryFormatter, Formatter, e IFormatter agora são obsoletos e apresentam um 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 As APIs de serialização do BinaryFormatter produzem erros do compilador.
Descrição da alteração
Devido a vulnerabilidades de segurança no BinaryFormatter, os métodos a seguir agora estão obsoletos e produzem um aviso de compilação com a ID SYSLIB0011. Além disso, no ASP.NET Core 5.0 e em aplicativos posteriores, eles lançarão um NotSupportedException, a menos que o aplicativo Web tenha habilitado novamente 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 alteração
Esses métodos são marcados como obsoletos como parte de um esforço para reduzir o uso do BinaryFormatter ecossistema do .NET.
Ação recomendada
Pare de usar BinaryFormatter em seu código. Em vez disso, considere usar JsonSerializer ou XmlSerializer. Para obter mais informações, consulte o guia de segurança do BinaryFormatter.
Você pode suprimir temporariamente o BinaryFormatter aviso de tempo de compilação, que é
SYSLIB0011. Recomendamos que você avalie completamente seu código quanto aos riscos antes de escolher essa opção. A maneira mais fácil de suprimir os avisos é cercar o site 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.
SYSLIB0011Suprimir não suprime avisos causados pelo uso de outras APIs obsoletas.Para continuar usando BinaryFormatter em aplicativos ASP.NET, você pode habilitá-lo novamente no arquivo de projeto. No entanto, é altamente recomendável não fazer isso. Para obter mais informações, consulte o guia de segurança do BinaryFormatter.
<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 Resolvendo erros de obsoleto e desabilitaçã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)