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:
- System.Exception.SerializeObjectState Událost
- BinaryFormatter.Serialize Metoda
- BinaryFormatter.Deserialize Metoda
- Formatter.Serialize(Stream, Object) Metoda
- Formatter.Deserialize(Stream) Metoda
- IFormatter.Serialize(Stream, Object) Metoda
- IFormatter.Deserialize(Stream) Metoda
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.
Doporučená akce
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í BinaryFormatter bez 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í 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 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
- System.Exception.SerializeObjectState
- 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)
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro