Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
BinaryFormatter eltávolítás
A .NET 9-től kezdve már nem támogatott az ismert biztonsági kockázatok miatt, BinaryFormatter és api-jai mindig minden projekttípushoz, beleértve az alkalmazásokat isPlatformNotSupportedException.Windows Forms A kockázatokról BinaryFormatter és azok eltávolításának okáról a migrálási BinaryFormatter útmutatóban talál további információt.
Az eltávolítás során BinaryFormattervárhatóan sok Windows Forms alkalmazásra lesz hatással, és a .NET 9-es vagy újabb verziójára való migrálás befejezéséhez lépéseket kell végrehajtania.
A BinaryFormatter hatás Windows Forms
A .NET 9 előtt a Windows Forms a BinaryFormatter használta adat szerializálására és deszerializálására olyan forgatókönyvekhez, mint a vágólap, a húzás és ejtés, valamint az erőforrások tárolása vagy betöltése tervezési időben. A .NET 9-től kezdve a Windows Forms WPF az implementáció egy részhalmazát BinaryFormatter használja belsőleg ezekhez a forgatókönyvekhez. Bár BinaryFormatteraz általános célú szerializálásban/deszerializálásban nem lehet kezelni a kockázatokat, olyan intézkedéseket hoztak, amelyek az ilyen nagyon specifikus használati esetekben ismert típusokkal mérsékelik a kockázatokat. Az ismeretlen vagy nem támogatott típusok esetében továbbra is érvényben van a visszalépés BinaryFormatter , amely kivételeket eredményez, kivéve, ha migrálási lépések történnek az alkalmazásban.
Windows Forms a WPF-alkalmazások a következő típusokat kezelik, valamint az ilyen típusú tömböket és listákat. A vágólap, a húzási és a tervezési idő típusú erőforrások továbbra is működni fognak ezekkel a típusokkal anélkül, hogy migrálási lépésekre lenne szükség.
boolbytechardecimaldoubleintsbytefloat- TimeSpan
- DateTime
uintstringnintnuintlongulongshortushort- PointF
- RectangleF
Windows Forms a következő további típusokat is támogatja:
OLE-forgatókönyvek
Az eltávolítás OLE-forgatókönyvekre, BinaryFormatter például vágólapra és húzással, valamint migrálási útmutatóval kapcsolatos információkért tekintse meg Windows Forms és Windows megjelenítési alaprendszer BinaryFormatter OLE-útmutatást.
Erőforrások (ResX)
A Windows Forms tervező
A Windows Forms Folyamaton kívüli tervező belsőleg is használja BinaryFormatter a ResX szerializálást és a deszerializálást.
Előfordulhat, hogy a típusok és tulajdonságok anélkül vesznek részt a szerializálásban, hogy a Tervező szokásos viselkedése miatt észrevenné.Windows Forms Az egyik módszer, amellyel nem biztos, hogy BinaryFormatter tisztában van, ha public egy tulajdonságot bevezetnek, IComponent és a tulajdonságot a tervezéskor töltik ki vagy szerkesztik. A tulajdonság az alábbi feltételek mellett szerializálva lesz erőforrásfájlokká:
- A nyilvános tulajdonság adatokat tartalmaz a Tervezőben lévő adatok mentésekor Form .
- Ez a tulajdonság nem írásvédett.
- Ez a tulajdonság nincs hozzárendelve a .-hez
[DesignerSerializationVisibility(false)]. - Ennek a tulajdonságnak DefaultValueAttributenincs .
- Ennek a tulajdonságnak nincs megfelelő
bool ShouldSerialize[PropertyName]metódusa, amely a CodeDOM szerializálási folyamat időpontjában ad visszafalse. (Megjegyzés: a metódus hatókörrel rendelkezhetprivate.) - Ez a tulajdonság olyan típus, amely nem rendelkezik DesignerSerializer
Ha ezek az utasítások igazak, a Tervező megállapítja, hogy a tulajdonság típusa típuskonverterrel rendelkezik-e. Ha igen, a Tervező a típuskonverterrel szerializálja a tulajdonságtartalmat. BinaryFormatter Ellenkező esetben szerializálja a tartalmat az erőforrásfájlba. Windows Forms olyan elemzőket és kódjavításokat is hozzáadott, amelyek segítenek felhívni a figyelmet az ilyen típusú viselkedésre, ahol BinaryFormatter a szerializálás a fejlesztő tudta nélkül is előfordulhat.
Erőforrás betöltése futásidőben
A korábban erőforrásfájlokba BinaryFormatter szerializált típusok továbbra is a várt módon deszerializálódnak anélkül, hogy szükség volna rá BinaryFormatter , mivel a ResX-fájlok tartalma megbízható adatnak minősül. Abban a ritka esetben, amikor a deszerializálás nem végezhető el anélkül BinaryFormatter, egy nem támogatott kompatibilitási csomaggal újra hozzáadható. Részletekért lásd BinaryFormatter a migrálási útmutatót: Kompatibilitási csomag . Vegye figyelembe, hogy az erőforrások használatához további lépésre van szükség az alkalmazáskörnyezet kapcsolójának System.Resources.Extensions.UseBinaryFormatter beállításához.trueBinaryFormatter
Erőforrásfájlok létrehozása AZ MSBuild használatával
Ha az MSBuild használatával hoz létre erőforrásfájlokat, hibaüzenet jelenhet meg MSB3825 . Ez a hiba azt jelzi, hogy a bináris formátumú erőforrások futásidőben esetleg deszerializálva lesznek a BinaryFormatter használatával. A figyelmeztetés el lesz távolítva a .NET 9-et és újabb verziót célzó buildekből, de az eltávolítás még nem fejeződött be a .NET 9 összes kiadásában. A figyelmeztetésnek csak a .NET 8-at és az alacsonyabb verziót kell érintenie. Ahogy korábban említettük, ezek az erőforrások nem fognak deszerializálódni futásidőben a .NET 9 és újabb verzióiban. A GenerateResourceWarnOnBinaryFormatterUse tulajdonság beállításával kikapcsolhatja a figyelmeztetést false. Ritka esetekben, amikor a deszerializálás nem végezhető el anélkül BinaryFormatter, egy nem támogatott kompatibilitási csomaggal újra hozzáadható. További információ: BinaryFormatter Migrálási útmutató: Kompatibilitási csomag. Vegye figyelembe, hogy az System.Resources.Extensions.UseBinaryFormatter alkalmazáskörnyezet kapcsolójának true beállításának további lépése szükséges az erőforrások használatához BinaryFormatter .
Migrálás távolról BinaryFormatter
Ha a szerializálás és a deszerializálás során belsőleg nem kezelt típusokat használnak az érintett forgatókönyvekben, a .NET 9-es vagy újabb verzióra való migrálás befejezéséhez lépéseket kell végrehajtania.
OLE-forgatókönyvek
Tekintse meg Windows Forms és Windows megjelenítési alaprendszer BinaryFormatter OLE-útmutatást, amely további információt nyújt arról, hogyan migrálhat távolról BinaryFormatter olyan helyzetekben, mint a vágólap vagy a húzás.
Erőforrások betöltése és mentése a tervezés során
Az erőforrásokba való szerializálás során belsőleg nem kezelt típusok esetében, például a ResX-forgatókönyvekkel rendelkező Tervező esetében az elvándorlás BinaryFormatter előírt módja annak biztosítása TypeConverter , hogy a szerializálásban részt vevő típus vagy tulajdonság regisztrálva legyen. Ily módon a szerializálás és a deszerializálás során az TypeConverter egyszer használt hol BinaryFormatter helyett használják. A típuskonverter implementálásával kapcsolatos további információkért lásd az TypeConverter osztályt.
Kompatibilitási kerülő megoldás (nem ajánlott)
Azok a .NET 9-felhasználók, akik nem tudnak távolról áttelepülni BinaryFormatter , nem támogatott kompatibilitási csomagot telepíthetnek. További információ: BinaryFormatter Migrálási útmutató: Kompatibilitási csomag.
Figyelemfelhívás
BinaryFormatter veszélyes, és nem ajánlott, mivel olyan támadások esetén veszélyezteti az alkalmazások használatát, mint a szolgáltatásmegtagadás (DoS), az információk felfedése vagy a távoli kódfuttatás. A kockázatokkal BinaryFormatter kapcsolatos további információkért lásd a deszerializálási kockázatokat a BinaryFormatter használatban és a kapcsolódó típusokban.
Problémák
Ha váratlan viselkedést tapasztal a Windows Forms alkalmazással BinaryFormatter szerializálással vagy deszerializálással kapcsolatban, jelentse a hibát a github.com/dotnet/winforms oldalon, és jelezze, hogy a probléma a BinaryFormattereltávolításával kapcsolatos.