Megosztás a következőn keresztül:


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 SYSLIB0011eredményeznek, de nem változnak a viselkedésük:

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.

  • 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 SYSLIB0011kö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

Lásd még