BinaryFormatter szerializálási API-k fordítási hibákat okoznak
A BinaryFormatter hosszú távú elavulási tervének részeként továbbra is kiépítjük BinaryFormatter
a kódtárak és az elválasztó fejlesztők funkcióit. A .NET 7-től kezdve a következő API-k hívásai fordítási időt eredményeznek az összes C# és Visual Basic projekttípusban:
- System.Exception.SerializeObjectState Esemény
- BinaryFormatter.Serialize Módszer
- BinaryFormatter.Deserialize Módszer
- Formatter.Serialize(Stream, Object) Módszer
- Formatter.Deserialize(Stream) Módszer
- IFormatter.Serialize(Stream, Object) Módszer
- IFormatter.Deserialize(Stream) Módszer
Előző viselkedés
A .NET 5 óta az érintett Serialize
és Deserialize
a metódusok használatával generált egy fordítói figyelmeztetést azonosítóval SYSLIB0011
. További információ: BinaryFormatter szerializálási módszerek elavultak és tiltva vannak ASP.NET alkalmazásokban (.NET 5)..
Az Exception.SerializeObjectState esemény használata nem eredményezett hibát.
Új viselkedés
A .NET 7-től kezdődően az érintett API-k kódban való használatával fordítóhiba jön létre ugyanazzal az azonosítóval. SYSLIB0011
A projektre akkor lesz hatással, ha megfelel az alábbi feltételeknek:
- Ez egy C# vagy Visual Basic projekt.
- Cél vagy
net7.0
magasabb. - Közvetlenül meghívja az érintett API-k egyikét.
- Még nem tiltja le a
SYSLIB0011
figyelmeztető kódot.
Bevezetett verzió
.NET 7
A kompatibilitástörő változás típusa
Ez a módosítás hatással lehet a forráskompatibilitásra.
A változás oka
A BinaryFormatter hosszú távú elavulási tervének részeként továbbra is kiépítjük BinaryFormatter
a kódtárak és az elválasztó fejlesztők funkcióit.
Javasolt művelet
A legjobb megoldás az, ha a biztonsági és megbízhatósági hibák miatt távolodunk el BinaryFormatter
. BinaryFormatter
egy későbbi kiadásban eltávolítható a .NET-ből. A .NET-kódtárak csapata már foglalt egy olyan álláspontot, amellyel a legutóbbi típusok, például System.HalfSystem.DateOnly nem kompatibilisek BinaryFormatter
.
Ha el kell hárítania a hibákat, ezt az eredeti obszoletion-cikkben található irányelvek követésével teheti meg. A hiba projektszintű letiltását úgy is letilthatja, hogy beállít egy olyan projekttulajdonságot, amely visszaalakítja a hibát figyelmeztetéssé (a .NET 5/6 viselkedésének megfelelően).
Figyelmeztetés
A tulajdonság beállítása megváltoztathatja a gazdagép viselkedését. Lásd: <EnableUnsafeBinaryFormatterSerialization> tulajdonság.
<PropertyGroup>
...
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
Feljegyzés
Ha a projekt a "figyelmeztetések hibaként" lehetőséggel áll össze, a fordítás továbbra is sikertelen lesz. (Ez megfelel a .NET 5 és a .NET 6 SDK-ban szállított viselkedésnek.) Ebben az esetben továbbra is el kell tiltania a figyelmeztetést a SYSLIB0011
forrásban vagy a projektfájl elemében <NoWarn>
.
<EnableUnsafeBinaryFormatterSerialization> tulajdonság
A <EnableUnsafeBinaryFormatterSerialization
tulajdonság a .NET 5-ben lett bevezetve. A .NET 7-ben a kapcsoló viselkedése megváltozott a fordítás és a gazdagép futásidejének szabályozása érdekében. Ennek a kapcsolónak a jelentése a projekt típusától függően eltérő, az alábbi táblázatban leírtak szerint.
Projekt típusa | A tulajdonság beállítása: true |
A tulajdonság beállítása: false |
A tulajdonság nincs megadva |
---|---|---|---|
Kódtár/megosztott összetevő1 | Az érintett API-k figyelmeztetésként elavultak. A fordítás csak akkor sikeres, ha engedélyezve van a "figyelmeztetések hibaként" lehetőség az alkalmazáshoz, vagy nem tiltotta le a SYSLIB0011 figyelmeztető kódot. |
Az érintett API-k hibaként elavultak, és a kódból az adott API-kra irányuló hívások fordításkor sikertelenek lesznek, kivéve, ha a hiba el van tiltva. | (Ugyanaz, mint a false .) |
Blazor és MAUI-alkalmazások2 | A hívás BinaryFormatter futásidőben meghiúsul. |
A hívás BinaryFormatter futásidőben meghiúsul. |
A hívás BinaryFormatter futásidőben meghiúsul. |
ASP.NET-alkalmazás | Az érintett API-k figyelmeztetésként elavultak. A fordítás csak akkor sikeres, ha engedélyezve van a "figyelmeztetések hibaként" lehetőség az alkalmazáshoz, vagy nem tiltotta le a SYSLIB0011 figyelmeztető kódot. A futtatókörnyezet lehetővé teszi a hívások indításátBinaryFormatter , függetlenül attól, hogy a hívás a kódból vagy a felhasznált függőségből származik-e. |
Az érintett API-k hibaként elavultak, és a kódból az adott API-kra irányuló hívások fordításkor sikertelenek lesznek, kivéve, ha a hiba el van tiltva. A futtatókörnyezet tiltja a hívások indításátBinaryFormatter , függetlenül attól, hogy a hívás a kódból vagy a felhasznált függőségből származik-e. |
(Ugyanaz, mint a false .) |
Asztali alkalmazások és minden más alkalmazástípus | Az érintett API-k figyelmeztetésként elavultak. A fordítás csak akkor sikeres, ha engedélyezve van a "figyelmeztetések hibaként" lehetőség az alkalmazáshoz, vagy nem tiltotta le a SYSLIB0011 figyelmeztető kódot. A futtatókörnyezet lehetővé teszi a hívások indításátBinaryFormatter , függetlenül attól, hogy a hívás a kódból vagy a felhasznált függőségből származik-e. |
Az érintett API-k hibaként elavultak, és a kódból az adott API-kra irányuló hívások fordításkor sikertelenek lesznek, kivéve, ha a hiba el van tiltva. A futtatókörnyezet tiltja a hívások indításátBinaryFormatter , függetlenül attól, hogy a hívás a kódból vagy a felhasznált függőségből származik-e. |
Az érintett API-k hibaként elavultak, és a kódból az adott API-kra irányuló hívások fordításkor sikertelenek lesznek, kivéve, ha a hiba el van tiltva. A futtatókörnyezet lehetővé teszi a hívások indításátBinaryFormatter , függetlenül attól, hogy a hívás a kódból vagy a felhasznált függőségből származik-e. |
1A futtatókörnyezeti szabályzatot az alkalmazásgazda vezérli. Előfordulhat, hogy a hívások BinaryFormatter
futásidőben meghiúsulnak, még akkor is, ha <EnableUnsafeBinaryFormatterSerialization>
a tár projektfájljában van beállítva true
. A kódtárak nem bírálhatják felül az alkalmazásgazda futásidejű szabályzatát.
2A Blazor és a MAUI futtatókörnyezetek tiltják a hívásokat.BinaryFormatter
A megadott <EnableUnsafeBinaryFormatterSerialization>
értéktől függetlenül a hívások futásidőben sikertelenek lesznek. Ne hívja meg ezeket az API-kat Blazor- vagy MAUI-alkalmazásokból, illetve a Blazor vagy a MAUI-alkalmazások által használni kívánt kódtárakból.
Érintett API-k
- 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)
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: