Dela via


Api:er för BinaryFormatter-serialisering genererar kompilatorfel

Som en del av den långsiktiga utfasningsplanen för BinaryFormatter fortsätter vi att gallra bort BinaryFormatter funktioner från våra bibliotek och avväpna utvecklare från typen. Från och med .NET 7 skapar anrop till följande API:er kompileringsfel för alla C#- och Visual Basic-projekttyper:

Tidigare beteende

Sedan .NET 5 skapade med hjälp av de berörda Serialize metoderna en kompilatorvarningmed ID SYSLIB0011.Deserialize Mer information finns i BinaryFormatter-serialiseringsmetoder är föråldrade och förbjudna i ASP.NET appar (.NET 5).

Det uppstod inget fel vid användning av Exception.SerializeObjectState händelsen.

Nytt beteende

Från och med .NET 7 skapar någon av de berörda API:erna i kod ett kompilatorfelmed samma ID, SYSLIB0011. Projektet påverkas om det uppfyller alla följande kriterier:

  • Det är ett C#- eller Visual Basic-projekt.
  • Den riktar sig mot net7.0 eller högre.
  • Den anropar direkt ett av de berörda API:erna.
  • Varningskoden ignoreras SYSLIB0011 inte redan.

Version introducerad

.NET 7

Typ av icke-bakåtkompatibel ändring

Den här ändringen kan påverka källkompatibiliteten.

Orsak till ändringen

Som en del av den långsiktiga utfasningsplanen för BinaryFormatter fortsätter vi att gallra bort BinaryFormatter funktioner från våra bibliotek och avväpna utvecklare från typen.

Det bästa sättet är att migrera bort från BinaryFormatter på grund av dess säkerhets- och tillförlitlighetsfel. BinaryFormatter kan tas bort från .NET i en framtida version. .NET-biblioteksteamet har redan tagit ställning till att de senaste typerna, till exempel System.Half och System.DateOnly inte är kompatibla med BinaryFormatter.

Om du måste förhindra felen kan du göra det genom att följa riktlinjerna i den ursprungliga obsoletionsartikeln. Du kan också inaktivera felet projektomfattande genom att ange en projektegenskap som konverterar felet tillbaka till en varning (för att matcha beteendet .NET 5/6).

Varning

Om du anger den här egenskapen kan värdbeteendet ändras. Se <Egenskapen EnableUnsafeBinaryFormatterSerialization>.

<PropertyGroup>
    ...
    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

Kommentar

Om projektet kompileras med "varningar som fel" aktiverat misslyckas kompilering fortfarande. (Detta matchar det beteende som levererades i .NET 5- och .NET 6 SDK:er.) Om så är fallet måste du fortfarande ignorera varningen SYSLIB0011 i källan eller i projektfilens <NoWarn> element.

<EnableUnsafeBinaryFormatterSerialization-egenskap>

Egenskapen <EnableUnsafeBinaryFormatterSerialization introducerades i .NET 5. Med .NET 7 har beteendet för den här växeln ändrats för att styra både kompilerings- och värdkörningsbeteendet . Innebörden av den här växeln skiljer sig beroende på projekttyp, enligt beskrivningen i följande tabell.

Typ av projekt Egenskapen är inställd på true Egenskapen är inställd på false Egenskapen utelämnas
Bibliotek/delad komponent1 De berörda API:erna är föråldrade som varning. Kompilering lyckas om du inte har "varningar som fel" aktiverat för ditt program eller om du har utelämnat varningskoden SYSLIB0011 . De berörda API:erna är föråldrade som fel, och anrop från koden till dessa API:er misslyckas vid kompileringstillfället om inte felet undertrycks. (Samma som för false.)
Blazor- och MAUI-appar2 Anrop till BinaryFormatter misslyckas vid körning. Anrop till BinaryFormatter misslyckas vid körning. Anrop till BinaryFormatter misslyckas vid körning.
ASP.NET-app De berörda API:erna är föråldrade som varning. Kompilering lyckas om du inte har "varningar som fel" aktiverat för ditt program eller om du har utelämnat varningskoden SYSLIB0011 . Körningen tillåter anrop till BinaryFormatter, oavsett om anropet kommer från din kod eller från ett beroende som du använder. De berörda API:erna är föråldrade som fel, och anrop från koden till dessa API:er misslyckas vid kompileringstillfället om inte felet undertrycks. Körningen förbjuder anrop till BinaryFormatter, oavsett om anropet kommer från din kod eller från ett beroende som du använder. (Samma som för false.)
Skrivbordsappar och alla andra apptyper De berörda API:erna är föråldrade som varning. Kompilering lyckas om du inte har "varningar som fel" aktiverat för ditt program eller om du har utelämnat varningskoden SYSLIB0011 . Körningen tillåter anrop till BinaryFormatter, oavsett om anropet kommer från din kod eller från ett beroende som du använder. De berörda API:erna är föråldrade som fel, och anrop från koden till dessa API:er misslyckas vid kompileringstillfället om inte felet undertrycks. Körningen förbjuder anrop till BinaryFormatter, oavsett om anropet kommer från din kod eller från ett beroende som du använder. De berörda API:erna är föråldrade som fel, och anrop från koden till dessa API:er misslyckas vid kompileringstillfället om inte felet undertrycks. Körningen tillåter anrop till BinaryFormatter, oavsett om anropet kommer från din kod eller från ett beroende som du använder.

1Körningsprincipen styrs av appvärden. Anrop till BinaryFormatter kan fortfarande misslyckas vid körning även om <EnableUnsafeBinaryFormatterSerialization> är inställt på true i bibliotekets projektfil. Bibliotek kan inte åsidosätta appvärdens körningsprincip.

2Blazor- och MAUI-runtimes förbjuder anrop till BinaryFormatter. Oavsett vilket värde du anger för <EnableUnsafeBinaryFormatterSerialization>misslyckas anropen vid körning. Anropa inte dessa API:er från Blazor- eller MAUI-program eller från bibliotek som är avsedda att användas av Blazor- eller MAUI-appar.

Berörda API:er

Se även