BinaryFormatter-serialiseringsmetoder är föråldrade och förbjudna i ASP.NET appar
Serialize
och Deserialize
metoder på BinaryFormatter, Formatter, och IFormatter är nu föråldrade som varning. Dessutom BinaryFormatter är serialisering förbjuden som standard för ASP.NET appar.
Kommentar
I .NET 7 är de berörda API:erna föråldrade som fel. Mer information finns i BinaryFormatter serialisering API:er producerar kompilatorfel.
Ändra beskrivning
På grund av säkerhetsrisker i BinaryFormatterär följande metoder nu föråldrade och skapar en kompileringstidsvarning med ID SYSLIB0011
. I ASP.NET Core 5.0 och senare appar genererar de dessutom en NotSupportedException, såvida inte webbappen har återaktiverade BinaryFormatter funktioner.
Följande serialiseringsmetoder är också föråldrade och ger varning SYSLIB0011
, men har inga beteendeändringar:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Version introducerad
5,0
Orsak till ändringen
Dessa metoder är markerade som föråldrade som en del av ett försök att avveckla användningen av BinaryFormatter i .NET-ekosystemet.
Rekommenderad åtgärd
Sluta använda BinaryFormatter i koden. Överväg i stället att använda JsonSerializer eller XmlSerializer. Mer information finns i Säkerhetsguide för BinaryFormatter.
Du kan tillfälligt ignorera kompileringstidsvarningen BinaryFormatter , som är
SYSLIB0011
. Vi rekommenderar att du noggrant utvärderar koden för risker innan du väljer det här alternativet. Det enklaste sättet att förhindra varningarna är att omge den enskilda anropsplatsen med#pragma
direktiv.// 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 }
Du kan också ignorera varningen i projektfilen.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>
Om du undertrycker varningen i projektfilen ignoreras varningen för alla kodfiler i projektet. Undertryckning
SYSLIB0011
undertrycker inte varningar som orsakas av andra föråldrade API:er.Om du vill fortsätta använda BinaryFormatter i ASP.NET appar kan du återaktivera den i projektfilen. Vi rekommenderar dock starkt att du inte gör detta. Mer information finns i Säkerhetsguide för BinaryFormatter.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Mer information om rekommenderade åtgärder finns i Resolveing BinaryFormatter obsoletion and disablement errors (Lösa binaryFormatter-obsoletions- och inaktiveringsfel).
Berörda API:er
- 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)