Rozhraní API serializace BinaryFormatter vytvářejí chyby kompilátoru

Jako součást dlouhodobého plánu vyřazení BinaryFormatter pokračujeme BinaryFormatter v používání funkcí z našich knihoven a pro vývojáře, kteří jsou mimo tento typ. Počínaje rozhraním .NET 7 můžou volání následujících rozhraní API vést k chybám kompilace ve všech typech projektů jazyka C# a Visual Basic:

Předchozí chování

Vzhledem k tomu, rozhraní .NET 5, použití ovlivněných Serialize a Deserialize metod vytvořilo upozornění kompilátoru s ID SYSLIB0011. Další informace naleznete v tématu BinaryFormatter serializace metody jsou zastaralé a zakázané v aplikacích ASP.NET (.NET 5).

Exception.SerializeObjectState Použití události nevytvořilo chybu.

Nové chování

Počínaje rozhraním .NET 7 vytvoří použití libovolného ovlivněného rozhraní API v kódu chybu kompilátoru se stejným ID. SYSLIB0011 Projekt bude ovlivněn, pokud splňuje všechna následující kritéria:

  • Jedná se o projekt jazyka C# nebo Visual Basic.
  • Cílí net7.0 na ni nebo vyšší.
  • Přímo volá jedno z ovlivněných rozhraní API.
  • Kód upozornění ještě nepotlačuje SYSLIB0011 .

Zavedená verze

.NET 7

Typ zásadní změny

Tato změna může mít vliv na kompatibilitu zdroje.

Důvod změny

Jako součást dlouhodobého plánu vyřazení BinaryFormatter pokračujeme BinaryFormatter v používání funkcí z našich knihoven a pro vývojáře, kteří jsou mimo tento typ.

Nejlepší postup je migrovat mimo BinaryFormatter provoz kvůli chybám zabezpečení a spolehlivosti. BinaryFormatter v budoucí verzi může být odebrána z .NET. Tým knihoven .NET již zaujal postoj, který se stal nedávným typem, jako System.Half je a System.DateOnly nebude kompatibilní s BinaryFormatter.

Pokud je nutné potlačit chyby, můžete to udělat podle pokynů v původním článku o obsoletion. Chybu můžete také zakázat nastavením vlastnosti projektu, která chybu převede zpět na upozornění (aby odpovídala chování rozhraní .NET 5/6).

Upozorňující

Nastavení této vlastnosti může změnit chování hostitele. Viz <EnableUnsafeBinaryFormatterSerialization> vlastnost.

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

Poznámka:

Pokud se projekt zkompiluje s povolenými upozorněními jako chybami, kompilace se stále nezdaří. (Odpovídá chování dodanému v sadách SDK .NET 5 a .NET 6.) V takovém případě budete muset upozornění potlačit SYSLIB0011 ve zdroji nebo v elementu <NoWarn> souboru projektu.

<EnableUnsafeBinaryFormatterSerialization> – vlastnost

Vlastnost <EnableUnsafeBinaryFormatterSerialization byla zavedena v .NET 5. U rozhraní .NET 7 se chování tohoto přepínače změnilo tak, aby kontrolovalo chování kompilace i hostitele za běhu. Význam tohoto přepínače se liší podle typu projektu, jak je popsáno v následující tabulce.

Typ projektu Vlastnost nastavená na true Vlastnost nastavená na false Vlastnost není vynechána.
Knihovna/sdílená komponenta1 Ovlivněná rozhraní API jsou zastaralá jako upozornění. Kompilace bude úspěšná, pokud nemáte pro aplikaci povolená upozornění jako chyby nebo jste potlačí SYSLIB0011 kód upozornění. Ovlivněná rozhraní API jsou zastaralá jako chyba a volání z vašeho kódu do těchto rozhraní API selže v době kompilace, pokud se chyba nepotlačí. (Stejné jako pro false.)
AplikaceBlazor a MAUI 2 Volání, která BinaryFormatter budou neúspěšná za běhu. Volání, která BinaryFormatter budou neúspěšná za běhu. Volání, která BinaryFormatter budou neúspěšná za běhu.
Aplikace v ASP.NET Ovlivněná rozhraní API jsou zastaralá jako upozornění. Kompilace bude úspěšná, pokud nemáte pro aplikaci povolená upozornění jako chyby nebo jste potlačí SYSLIB0011 kód upozornění. Modul runtime umožní volání BinaryFormatter, bez ohledu na to, jestli volání pochází z vašeho kódu nebo z závislosti, kterou používáte. Ovlivněná rozhraní API jsou zastaralá jako chyba a volání z vašeho kódu do těchto rozhraní API selže v době kompilace, pokud se chyba nepotlačí. Modul runtime zakáže volání BinaryFormatterbez ohledu na to, jestli volání pochází z vašeho kódu nebo z závislosti, kterou používáte. (Stejné jako pro false.)
Desktopové aplikace a všechny ostatní typy aplikací Ovlivněná rozhraní API jsou zastaralá jako upozornění. Kompilace bude úspěšná, pokud nemáte pro aplikaci povolená upozornění jako chyby nebo jste potlačí SYSLIB0011 kód upozornění. Modul runtime umožní volání BinaryFormatter, bez ohledu na to, jestli volání pochází z vašeho kódu nebo z závislosti, kterou používáte. Ovlivněná rozhraní API jsou zastaralá jako chyba a volání z vašeho kódu do těchto rozhraní API selže v době kompilace, pokud se chyba nepotlačí. Modul runtime zakáže volání BinaryFormatterbez ohledu na to, jestli volání pochází z vašeho kódu nebo z závislosti, kterou používáte. Ovlivněná rozhraní API jsou zastaralá jako chyba a volání z vašeho kódu do těchto rozhraní API selže v době kompilace, pokud se chyba nepotlačí. Modul runtime umožní volání BinaryFormatter, bez ohledu na to, jestli volání pochází z vašeho kódu nebo z závislosti, kterou používáte.

1Zásady modulu runtime se řídí hostitelem aplikace. BinaryFormatter I když <EnableUnsafeBinaryFormatterSerialization> je v souboru projektu vaší knihovny nastavená možnost true volání do běhu, může selhat i v době běhu. Knihovny nemůžou přepsat zásady modulu runtime hostitele aplikace.

2Moduly runtime Blazor a MAUI zakazují volání BinaryFormatter. Bez ohledu na hodnotu, kterou jste nastavili <EnableUnsafeBinaryFormatterSerialization>, se volání v době běhu nezdaří. Tato rozhraní API nevolejte z aplikací Blazor nebo MAUI ani z knihoven, které mají být využívané aplikacemi Blazor nebo MAUI.

Ovlivněná rozhraní API

Viz také