Przewodnik migracji programu Windows Presentation Foundation(WPF) dla programu BinaryFormatter
BinaryFormatter usunięcie
Począwszy od platformy .NET 9, BinaryFormatter nie jest już obsługiwany ze względu na znane zagrożenia bezpieczeństwa, a jego interfejsy API zawsze zgłaszają wyjątek PlatformNotSupportedException dla wszystkich typów projektów, w tym WPF aplikacji. Aby uzyskać więcej informacji na temat czynników ryzyka BinaryFormatter i przyczyny jego usunięcia, zobacz BinaryFormatter przewodnik migracji.
W przypadku BinaryFormatterusunięcia oczekuje się, że będzie miało to wpływ na wiele WPF aplikacji i musisz podjąć działania w celu ukończenia migracji do platformy .NET 9 lub nowszej wersji.
Wpływ BinaryFormatterWPF
Przed platformą .NET 9 program Windows Presentation Foundation (WPF) używany BinaryFormatter do serializacji i deserializacji danych w scenariuszach takich jak schowek, przeciąganie i upuszczanie oraz ładowanie/przechowywanie stanu w dzienniku. Począwszy od platformy .NET 9, WPF a formularze systemu Windows używają podzestawu BinaryFormatter implementacji wewnętrznie w tych scenariuszach. Chociaż BinaryFormatternie można rozwiązać ryzyka w serializacji/deserializacji ogólnego przeznaczenia, podjęto środki w celu ograniczenia ryzyka w tych bardzo konkretnych przypadkach użycia ze znanym zestawem typów. Powrót do BinaryFormatter jest nadal w miejscu dla nieznanych lub nieobsługiwanych typów, co spowoduje zgłoszenie PlatformNotSupportedException , chyba że zostaną wykonane kroki migracji w aplikacji.
WPF Aplikacje WinForms obsługują zarówno następujące typy, jak i tablice i listy tych typów. Schowek, przeciąganie i upuszczanie oraz powiązanie Avalon w dzienniku będą nadal pracować z tymi typami bez konieczności wykonywania żadnych kroków migracji.
bool
byte
char
decimal
double
int
sbyte
float
- TimeSpan
- DateTime
uint
string
nint
nuint
long
ulong
short
ushort
- PointF
- RectangleF
Scenariusze OLE
Aby uzyskać informacje na temat skutków BinaryFormatter usuwania w scenariuszach OLE, takich jak schowek i przeciąganie i upuszczanie, a także wskazówki dotyczące migracji, zobacz Wskazówki dotyczące interfejsu OLE formularzy systemu Windows i Windows Presentation FoundationBinaryFormatter.
Możesz odwołać się do funkcji, w której użyliśmy BinaryFormatter jako rezerwowego do odczytu/zapisywania obiektu do obsługi: SaveObjectToHandle i ReadObjectFromHandle dla scenariuszy OLE
Rejestrowanie
W przypadku, gdy musimy przechowywać lub ładować stan podczas zarządzania historią nawigacji w programie WPF.
Aby załadować/zapisać, wywołujemy metodę LoadSubStreams SaveSubStreams/ klasy.DataStream
Jeśli element używany w części nie jest częścią typu know obsługiwanego przez nową implementację, zostanie użyty element BinaryFormatter.
Gdy deweloper przechodzi przez metodę JournalEntry przy użyciu metody Navigate
, GoForward
lub GoBack
, dane węzła są ładowane lub zapisywane w strumieniu w celu zapisania stanu. Jeśli używany typ nie jest wewnętrznie obsługiwany podczas serializacji/deserializacji, BinaryFormatter jest używany.
Dokumentacja: DataStream.cs
Obejście zgodności (niezalecane)
Użytkownicy platformy .NET 9, którzy nie mogą przeprowadzić migracji, BinaryFormatter mogą zainstalować nieobsługiwany pakiet zgodności. Aby uzyskać więcej informacji, zobacz BinaryFormatter Przewodnik migracji: Pakiet zgodności.
Uwaga
BinaryFormatter jest niebezpieczne i nie jest zalecane, ponieważ naraża aplikacje na ryzyko ataków, takich jak odmowa usługi (DoS), ujawnienie informacji lub zdalne wykonywanie kodu. Aby uzyskać więcej informacji na temat czynników ryzyka BinaryFormatter , zobacz Deserializacja ryzyka w użyciu i powiązanych BinaryFormatter typów.
Problemy
Jeśli wystąpi nieoczekiwane zachowanie aplikacji w odniesieniu BinaryFormatterdo usługi , zgłoś problem w witrynie dotnet/wpf//issues i wskaż, że problem jest związany z usunięciem elementu BinaryFormatter.WPF