Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
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.