A BinaryFormatter szerializálási módszerei elavultak és tiltottak ASP.NET alkalmazásokban
Serialize
és Deserialize
metódusok BinaryFormatter, Formatterés IFormatter most már elavultak figyelmeztetésként. Emellett BinaryFormatter a szerializálás alapértelmezés szerint tilos ASP.NET alkalmazások esetében.
Feljegyzés
A .NET 7-ben az érintett API-k hibaként elavultak. További információ: BinaryFormatter szerializálási API-k fordítási hibákat okoznak.
Módosítás leírása
A biztonsági résekBinaryFormattermiatt a következő módszerek elavultak, és fordítási időt jelző figyelmeztetést hoznak létre azonosítóval SYSLIB0011
. Emellett a ASP.NET Core 5.0-s és újabb verzióiban NotSupportedExceptionegy , hacsak a webalkalmazás nem rendelkezik újraengedélyezett BinaryFormatter funkciókkal.
A következő szerializálási módszerek szintén elavultak, és figyelmeztetést SYSLIB0011
eredményeznek, de nem változnak a viselkedésük:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Bevezetett verzió
5,0
A változás oka
Ezek a módszerek elavultnak minősülnek a .NET-ökoszisztémán belüli használat BinaryFormatter megszüntetésére irányuló erőfeszítések részeként.
Javasolt művelet
Hagyja abba a kód használatát BinaryFormatter . Ehelyett fontolja meg a használatot JsonSerializer vagy XmlSerializera . További információ: BinaryFormatter biztonsági útmutató.
Ideiglenesen letilthatja a BinaryFormatter fordítási időt jelző figyelmeztetést, amely a
SYSLIB0011
következő: . Javasoljuk, hogy a lehetőség kiválasztása előtt alaposan értékelje ki a kódot a kockázatokkal kapcsolatban. A figyelmeztetések letiltásának legegyszerűbb módja, ha az egyes híváswebhelyeket irányelvekkel#pragma
veszi körül.// 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 }
A projektfájlban lévő figyelmeztetést is letilthatja.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>
Ha a projektfájlban letiltja a figyelmeztetést, a program letiltja a figyelmeztetést a projekt összes kódfájlja esetében. A letiltás
SYSLIB0011
nem tiltja le a más elavult API-k által okozott figyelmeztetéseket.Ha ASP.NET alkalmazásokban szeretné folytatni a használatát BinaryFormatter , újra engedélyezheti azt a projektfájlban. Azonban erősen ajánlott, hogy ezt ne tegye. További információ: BinaryFormatter biztonsági útmutató.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Az ajánlott műveletekkel kapcsolatos további információkért lásd : BinaryFormatter obsoletion and disablement errors.
Érintett API-k
- 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)
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: