Поделиться через


Руководство по миграции Windows Presentation Foundation(WPF) для BinaryFormatter

BinaryFormatter удаление

Начиная с .NET 9, BinaryFormatter больше не поддерживается из-за известных PlatformNotSupportedException, включая WPF приложения. Дополнительные сведения о рисках BinaryFormatter и причине его удаления см. в руководстве BinaryFormatter по миграции.

При BinaryFormatterудалении ожидается, что многие WPF приложения будут затронуты, и вам потребуется принять меры для завершения миграции в .NET 9 или более поздней версии.

Как BinaryFormatter влияет WPF

До .NET 9 Windows Presentation Foundation (WPF) используется BinaryFormatter для сериализации и десериализации данных для таких сценариев буфера обмена, перетаскивания и загрузки и хранения состояния в журнале. Начиная с .NET 9 и WPF Windows Forms используют подмножество BinaryFormatter реализации внутри этих сценариев. Хотя BinaryFormatterриски не могут быть устранены в сериализации и десериализации общего назначения, были приняты меры по устранению рисков в этих очень конкретных случаях использования с известным набором типов. Резервная BinaryFormatter копия по-прежнему находится на месте для неизвестных или неподдерживаемых типов, что приведет к возникновению PlatformNotSupportedException ошибки, если в приложении не выполняются шаги по миграции.

WPF и приложения WinForms обрабатывают следующие типы, а также массивы и списки этих типов. Буфер обмена, перетаскивание и привязка Avalon в журнале будут продолжать работать с этими типами без каких-либо шагов миграции.

Сценарии OLE

Сведения об удалении эффектов BinaryFormatter имеются в таких сценариях OLE, как буфер обмена и перетаскивание, а также рекомендации по миграции в Windows Forms и Windows Presentation Foundation BinaryFormatter OLE.

Вы можете ссылаться на функцию, в которой мы использовали BinaryFormatter в качестве резервного варианта для чтения и сохранения объекта для обработки: SaveObjectToHandle и ReadObjectFromHandle для сценариев OLE

Ведение журнала

В случае, если необходимо сохранить или загрузить состояние при управлении журналом навигации в WPF.

Чтобы загрузить и сохранить, мы вызываем LoadSubStreams/ SaveSubStreamsDataStream класса. Если элемент, используемый не в части типа know, обрабатываемого новой реализацией, будет использоваться BinaryFormatter.

Когда разработчик переходит через JournalEntry с помощью Navigateили GoForwardGoBack, данные узла загружаются или сохраняются в потоке для сохранения состояния. Если используемый тип не обрабатывается внутренне во время сериализации или десериализации, BinaryFormatter используется.

Ссылка: DataStream.cs

Пользователи .NET 9, которые не могут перейти от BinaryFormatter него, могут установить неподдерживаемый пакет совместимости. Дополнительные сведения см BinaryFormatter . в руководстве по миграции: пакет совместимости.

Внимание

BinaryFormatter является опасным и не рекомендуется, так как он ставит использование приложений под угрозу для атак, таких как отказ в обслуживании (DoS), раскрытие информации или удаленное выполнение кода. Дополнительные сведения о рисках см. в разделе о рисках BinaryFormatter десериализации в использовании BinaryFormatter и связанных типах.

Проблемы

Если вы испытываете непредвиденное поведение с приложением WPF относительно BinaryFormatter, отправьте проблему по адресу dotnet/wpf/issues и укажите, что проблема связана с удалением BinaryFormatter.