Dela via


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:

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.

  • 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

Se även