Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Serialize
en Deserialize
methoden voor BinaryFormatter, Formatteren IFormatter zijn nu verouderd als waarschuwing. Bovendien is de serialisatie BinaryFormatter standaard verboden bij ASP.NET-toepassingen.
Opmerking
In .NET 7 zijn de betrokken API's verouderd als fout. Zie BinaryFormatter-serialisatie-API's voor meer informatie over compilerfouten.
Beschrijving wijzigen
Vanwege beveiligingsproblemen in BinaryFormatter, zijn de volgende methoden nu verouderd en produceren ze een compilatietijdwaarschuwing met id SYSLIB0011
. Bovendien zullen in ASP.NET Core 5.0 en latere apps een NotSupportedException optreden, tenzij de webapp de BinaryFormatter-functionaliteit opnieuw heeft ingeschakeld.
De volgende serialisatiemethoden zijn ook verouderd en produceren waarschuwing SYSLIB0011
, maar hebben geen gedragswijzigingen:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Geïntroduceerde versie
5,0
Reden voor wijziging
Deze methoden worden gemarkeerd als verouderd in een poging om het gebruik van BinaryFormatter binnen het .NET-ecosysteem af te bouwen.
Aanbevolen actie
Stop met het gebruik van BinaryFormatter in uw code. Overweeg in plaats daarvan het gebruik JsonSerializer of XmlSerializer. Zie de beveiligingshandleiding binaryFormatter voor meer informatie.
U kunt de waarschuwing over de BinaryFormatter compilatietijd tijdelijk onderdrukken.
SYSLIB0011
We raden u aan uw code grondig te beoordelen op risico's voordat u deze optie kiest. De eenvoudigste manier om de waarschuwingen te onderdrukken, is door de afzonderlijke oproepsite te omringen met#pragma
instructies.// 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 }
U kunt de waarschuwing ook onderdrukken in het projectbestand.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>
Als u de waarschuwing in het projectbestand onderdrukt, wordt de waarschuwing onderdrukt voor alle codebestanden in het project.
SYSLIB0011
Onderdrukken onderdrukt geen waarschuwingen die worden veroorzaakt door het gebruik van andere verouderde API's.Als u wilt blijven gebruiken BinaryFormatter in ASP.NET-apps, kunt u deze opnieuw inschakelen in het projectbestand. Het wordt echter sterk aangeraden dit niet te doen. Zie de beveiligingshandleiding binaryFormatter voor meer informatie.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Zie BinaryFormatter-obsoletion- en disablement-fouten oplossen voor meer informatie over aanbevolen acties.
Betreffende API's
- 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)