Megosztás a következőn keresztül:


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:

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.

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

Lásd még