Руководство по миграции 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 в журнале будут продолжать работать с этими типами без каких-либо шагов миграции.
bool
byte
char
decimal
double
int
sbyte
float
- TimeSpan
- DateTime
uint
string
nint
nuint
long
ulong
short
ushort
- PointF
- RectangleF
Сценарии OLE
Сведения об удалении эффектов BinaryFormatter имеются в таких сценариях OLE, как буфер обмена и перетаскивание, а также рекомендации по миграции в Windows Forms и Windows Presentation Foundation BinaryFormatter OLE.
Вы можете ссылаться на функцию, в которой мы использовали BinaryFormatter в качестве резервного варианта для чтения и сохранения объекта для обработки: SaveObjectToHandle и ReadObjectFromHandle для сценариев OLE
Ведение журнала
В случае, если необходимо сохранить или загрузить состояние при управлении журналом навигации в WPF.
Чтобы загрузить и сохранить, мы вызываем LoadSubStreams/ SaveSubStreamsDataStream
класса. Если элемент, используемый не в части типа know, обрабатываемого новой реализацией, будет использоваться BinaryFormatter.
Когда разработчик переходит через JournalEntry с помощью Navigate
или GoForward
GoBack
, данные узла загружаются или сохраняются в потоке для сохранения состояния. Если используемый тип не обрабатывается внутренне во время сериализации или десериализации, BinaryFormatter используется.
Ссылка: DataStream.cs
Обходное решение совместимости (не рекомендуется)
Пользователи .NET 9, которые не могут перейти от BinaryFormatter него, могут установить неподдерживаемый пакет совместимости. Дополнительные сведения см BinaryFormatter . в руководстве по миграции: пакет совместимости.
Внимание
BinaryFormatter является опасным и не рекомендуется, так как он ставит использование приложений под угрозу для атак, таких как отказ в обслуживании (DoS), раскрытие информации или удаленное выполнение кода. Дополнительные сведения о рисках см. в разделе о рисках BinaryFormatter десериализации в использовании BinaryFormatter и связанных типах.
Проблемы
Если вы испытываете непредвиденное поведение с приложением WPF относительно BinaryFormatter, отправьте проблему по адресу dotnet/wpf/issues и укажите, что проблема связана с удалением BinaryFormatter.