Udostępnij za pośrednictwem


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.

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, GoForwardlub 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

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