Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
BinaryFormatter удаление
Начиная с .NET 9, BinaryFormatter больше не поддерживается из-за известных , включая PlatformNotSupportedException приложения. Дополнительные сведения о рисках BinaryFormatter и причине его удаления см. в руководстве BinaryFormatter по миграции.
При BinaryFormatterудалении ожидается, что многие Windows Forms приложения будут затронуты, и вам потребуется принять меры для завершения миграции в .NET 9 или более поздней версии.
Как BinaryFormatter влияет Windows Forms
До .NET 9 Windows Forms использовал BinaryFormatter для сериализации и десериализации данных в таких сценариях, как буфер обмена, перетаскивание, а также хранение или загрузка ресурсов во время проектирования. Начиная с .NET 9 и Windows Forms WPF используют подмножество BinaryFormatter реализации внутри этих сценариев. Хотя BinaryFormatterриски не могут быть устранены в сериализации и десериализации общего назначения, были приняты меры по устранению рисков в этих очень конкретных случаях использования с известным набором типов. Резервная BinaryFormatter копия по-прежнему находится на месте для неизвестных или неподдерживаемых типов, что приведет к возникновению исключений, если в приложении не выполняются шаги по миграции.
Windows Forms и приложения WPF обрабатывают следующие типы, а также массивы и списки этих типов. Буфер обмена, перетаскивание и ресурсы времени разработки будут продолжать работать с этими типами без каких-либо шагов миграции.
boolbytechardecimaldoubleintsbytefloat- TimeSpan
- DateTime
uintstringnintnuintlongulongshortushort- PointF
- RectangleF
Windows Forms также поддерживает следующие дополнительные типы:
Сценарии OLE
Сведения об удалении эффектов имеются в сценариях BinaryFormatter OLE, таких как буфер обмена и перетаскивание, а также рекомендации по миграции, а Windows Forms по миграции в Windows Presentation Foundation BinaryFormatter OLE.
Ресурсы (ResX)
Windows Forms Конструктор
Конструктор Windows Forms внепроцессных процессов также использует BinaryFormatter внутренне для сериализации и десериализации ResX.
Типы и свойства могут участвовать в сериализации без понимания стандартного поведения конструктора Windows Forms . Один из способов BinaryFormatter использования, о которых вы можете не знать, заключается в том, что publicIComponent свойство введено, а это свойство заполняется или редактируется во время разработки. Это свойство сериализуется в файлы ресурсов в следующих условиях:
- Общедоступное свойство содержит данные во время Form сохранения в конструкторе.
- Это свойство не доступно только для чтения.
- Это свойство не относится к
[DesignerSerializationVisibility(false)]. - Это свойство не имеет DefaultValueAttribute.
- Это свойство не имеет соответствующего
bool ShouldSerialize[PropertyName]метода, который возвращаетсяfalseво время процесса сериализации CodeDOM. (Примечание. Метод может иметьprivateобласть.) - Это свойство является типом, который не имеет DesignerSerializer
Если эти операторы имеют значение true, конструктор определяет, имеет ли тип этого свойства преобразователь типов. В этом случае конструктор использует преобразователь типов для сериализации содержимого свойства. В противном случае используется BinaryFormatter для сериализации содержимого в файл ресурса. Windows Forms добавил анализаторы вместе с исправлениями кода, которые помогают повысить осведомленность об этом типе поведения, где BinaryFormatter сериализация может происходить без знаний разработчика.
Загрузка ресурса во время выполнения
Типы, которые ранее были сериализованы в файлы ресурсов, BinaryFormatter будут продолжать десериализировать, как ожидалось, без необходимости BinaryFormatter , так как содержимое файлов ResX считается доверенными данными. В редких случаях десериализация не может происходить без BinaryFormatterнее, ее можно добавить обратно с неподдерживаемого пакета совместимости. Дополнительные сведения см BinaryFormatter . в руководстве по миграции: пакет совместимости. Обратите внимание, что для ресурсов требуется System.Resources.Extensions.UseBinaryFormatter дополнительный шаг настройки true контекста BinaryFormatter приложения.
Создание файлов ресурсов с помощью MSBuild
При создании файлов ресурсов с помощью MSBuild может произойти ошибка MSB3825. Эта ошибка указывает, что ресурсы, отформатированные в двоичном формате, могут быть десериализованы в BinaryFormatter режиме выполнения. Предупреждение удаляется из сборок, предназначенных для .NET 9 и более поздних версий, однако удаление еще не завершено во всех выпусках .NET 9. Предупреждение должно вызывать беспокойство только при ориентировании на .NET 8 или ниже. Как упоминалось ранее, эти ресурсы не будут десериализовываться с использованием BinaryFormatter во время выполнения в .NET 9 и более поздних версиях. Вы можете отключить предупреждение, задав для свойства GenerateResourceWarnOnBinaryFormatterUse значение false. В редких случаях десериализация не может происходить без BinaryFormatterнее, ее можно добавить обратно с неподдерживаемого пакета совместимости. Для получения дополнительной информации см. BinaryFormatter руководство по миграции: пакет совместимости. Обратите внимание, что для использования System.Resources.Extensions.UseBinaryFormatter в целях работы с ресурсами требуется дополнительный шаг настройки переключателя контекста приложения true на BinaryFormatter.
Миграция от BinaryFormatter
Если типы, которые не обрабатываются внутренне во время сериализации и десериализации, используются в затронутых сценариях, вам потребуется принять меры для завершения миграции в .NET 9 или более поздней версии.
Сценарии OLE
Дополнительные сведения о переходе из буфера обмена и перетаскивания смWindows Forms Для Windows Presentation FoundationBinaryFormatter.
Загрузка и сохранение ресурсов во время разработки
Для типов, которые не обрабатываются внутренне во время сериализации в ресурсы, например в случае конструктора с сценариями ResX, предписанный способ миграции из BinaryFormatter него заключается в том, чтобы обеспечить TypeConverter регистрацию для типа или свойства, участвующих в сериализации. Таким образом, во время сериализации и десериализации используется TypeConverter вместо того, где BinaryFormatter когда-то использовалось. Дополнительные сведения о реализации преобразователя типов см. в разделе TypeConverter "Класс".
Обходное решение совместимости (не рекомендуется)
Пользователи .NET 9, которые не могут перейти от BinaryFormatter него, могут установить неподдерживаемый пакет совместимости. Дополнительные сведения см BinaryFormatter . в руководстве по миграции: пакет совместимости.
Внимание
BinaryFormatter является опасным и не рекомендуется, так как он ставит использование приложений под угрозу для атак, таких как отказ в обслуживании (DoS), раскрытие информации или удаленное выполнение кода. Дополнительные сведения о рисках см. в разделе о рисках BinaryFormatter десериализации в использовании BinaryFormatter и связанных типах.
Проблемы
Если вы сталкиваетесь с непредвиденным поведением приложения Windows Forms в связи с сериализацией или десериализацией BinaryFormatter, сообщите о проблеме на github.com/dotnet/winforms и укажите, что проблема связана с удалением BinaryFormatter.