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


Перенацеливание изменений для миграции на платформа .NET Framework 4.8.x

В этой статье перечислены проблемы совместимости приложений, представленные в платформа .NET Framework 4.8 и 4.8.1.

.NET Framework 4.8

Основные сведения

Управляемые криптографические классы, которые не вызывают исключение CryptographyException в режиме FIPS

Сведения

В .NET Framework 4.7.2 и более ранних версий управляемые классы поставщиков служб шифрования, такие как SHA256Managed, выдавали исключение CryptographicException во время настройки системных библиотек шифрования в режиме FIPS. Эти исключения создаются, так как управляемые версии не прошли сертификацию FIPS 140-2, а также для запрета алгоритмов шифрования, которые не одобрены правилами FIPS. Так как у некоторых разработчиков компьютеры разработки работают в режиме FIPS, эти исключения часто вызываются только в рабочих системах. Приложения, предназначенные для .NET Framework 4.8 и более поздних версий, автоматически переключаются на более новую и нестрогую политику, чтобы исключение CryptographicException больше не вызывалось по умолчанию в таких случаях. Вместо этого управляемые классы шифрования перенацеливают криптографические операции на системную библиотеку шифрования. Это изменение политики эффективно устраняет возможное заблуждение относительно различий между средами разработки и рабочими средами, применяя к собственным и управляемым компонентам одну и ту же политику шифрования.

Предложение

Если это поведение нежелательно, вы можете отказаться от него и восстановить предыдущее поведение, чтобы CryptographicException создать его в режиме FIPS, добавив следующий параметр< конфигурации AppContextSwitchOverrides в раздел среды выполнения> файла конфигурации приложения:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=true" />
</runtime>

Если приложение предназначено для платформа .NET Framework 4.7.2 или более ранней версии, вы также можете выбрать это изменение, добавив следующий параметр конфигурации AppContextSwitchOverrides в <раздел среды выполнения> файла конфигурации приложения:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=false" />
</runtime>
Имя. Значение
Область Microsoft Edge
Версия 4,8
Тип Изменение целевой платформы

Затронутые API

Windows Forms

Улучшения специальных возможностей для элементов управления Windows Forms в .NET Framework 4.8

Сведения

В платформе Windows Forms продолжается улучшение использования специальных возможностей, обеспечивающих большее удобство для пользователей Windows Forms. Внесены следующие изменения:

  • Изменения для улучшения видимости в режиме высокой контрастности.
  • Изменения в порядке взаимодействия с экранным диктором.
  • Изменения в иерархии специальных возможностей (улучшение навигации по дереву автоматизации пользовательского интерфейса).

Предложение

Как принять или отклонить изменения Чтобы эти изменения можно было использовать в приложении, оно должно быть запущено на платформе .NET Framework 4.8. В приложении эти изменения можно использовать одним из следующих способов:

  • Выполнить повторную компиляцию, чтобы нацелить приложение на .NET Framework 4.8. Эти изменения специальных возможностей включены по умолчанию для приложений Windows Forms, предназначенных для .NET Framework 4.8.
  • Оно нацелено на .NET Framework 4.7.2 и более ранние версии платформы и позволяет отказаться от функций специальных возможностей предыдущих версий путем добавления параметра AppContext в раздел <runtime> файла конфигурации приложения и установки значения false, как показано в следующем примере.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false" />
  </runtime>
</configuration>

Обратите внимание, что для включения использования специальных возможностей, добавленных в .NET Framework 4.8, необходимо также включить специальные возможности платформы .NET Framework 4.7.1 и 4.7.2. В приложениях, предназначенных для .NET Framework 4.8, где требуется сохранить предыдущие функции специальных возможностей, можно выбрать прежние функции специальных возможностей, явно установив параметр AppContext в значение true. Для включения поддержки вызова подсказок для клавиатуры требуется добавить строку Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false со значением AppContextSwitchOverrides:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false" />

Обратите внимание, что для включения этой функции требуется включение упомянутых выше специальных возможностей .NET Framework 4.7.1–4.8. Кроме того, если вы не включили какую-либо из специальных возможностей, но включили функцию отображения подсказок, среда выполнения будет вызывать исключение NotSupportedException при первом доступе к этим функциям. Сообщение об исключении указывает, что подсказки по клавиатуре требуют включить улучшения специальных возможностей уровня 3.

Использование определенных в ОС цветов в темах высокой контрастности

  • Улучшенные темы высокой контрастности.

Улучшенная поддержка экранного диктора

  • Экранный диктор теперь сообщает направление сортировки DataGridViewColumn при объявлении доступного имени DataGridViewCell.

Улучшенная поддержка специальных возможностей CheckedListBox

  • Улучшенная поддержка экранного диктора для элемента управления CheckedListBox. При переходе к элементу управления CheckedListBox с помощью клавиатуры экранный диктор фокусируется на элементе CheckedListBox и объявляет его.
  • Пустой элемент управления CheckedListBox теперь содержит прямоугольник фокуса, нарисованный для виртуального первого элемента, при переходе фокуса на элемент управления.

Улучшенная поддержка специальных возможностей элемента управления ComboBox

  • Включена поддержка автоматизации пользовательского интерфейса для элемента управления ComboBox с возможностью использовать уведомления об автоматизации пользовательского интерфейса и другие функции автоматизации пользовательского интерфейса. Улучшенная поддержка специальных возможностей DataGridView

  • Включена поддержка автоматизации пользовательского интерфейса для элемента управления DataGridView с возможностью использовать уведомления об автоматизации пользовательского интерфейса и другие функции автоматизации пользовательского интерфейса.

  • Элемент автоматизации пользовательского интерфейса, который соответствует DataGridViewComboBoxEditingControl или DataGridViewTextBoxEditingControl, теперь является дочерним для соответствующей изменяемой ячейки.

Улучшенная поддержка специальных возможностей LinkLabel

  • Улучшенная LinkLabel доступность элемента управления: экранный диктор объявляет отключенное состояние для ссылки, если соответствующий LinkLabel элемент управления отключен.

Улучшенная поддержка специальных возможностей элемента управления ProgressBar

  • Включена поддержка автоматизации пользовательского интерфейса для элемента управления ProgressBar с возможностью использовать уведомления об автоматизации пользовательского интерфейса и другие функции автоматизации пользовательского интерфейса. Теперь разработчики могут использовать уведомления об автоматизации пользовательского интерфейса, которые экранный диктор может объявлять для отображения хода выполнения. Общие сведения о событиях автоматизации пользовательского интерфейса, включая события уведомления об автоматизации пользовательского интерфейса, см. в разделе Обзор событий автоматизации пользовательского интерфейса.

Улучшенная поддержка специальных возможностей PropertyGrid

  • Включена поддержка автоматизации пользовательского интерфейса для элемента управления PropertyGrid с возможностью использовать уведомления об автоматизации пользовательского интерфейса и другие функции автоматизации пользовательского интерфейса.
  • Элемент автоматизации пользовательского интерфейса, который соответствует текущему изменяемому свойству, теперь является дочерним соответствующего свойства элемента модели автоматизации пользовательского интерфейса.
  • Элемент свойства модели автоматизации пользовательского интерфейса теперь является дочерним для соответствующего элемента категории, если родительский элемент управления PropertyGrid задан на представление категорий.

Улучшенная поддержка элемента управления ToolStrip

  • Включена поддержка автоматизации пользовательского интерфейса для элемента управления ToolStrip с возможностью использовать уведомления об автоматизации пользовательского интерфейса и другие функции автоматизации пользовательского интерфейса.
  • Улучшенная навигация по элементам ToolStrip.
  • В режиме элементов фокус экранного диктора не исчезает и не переходит к скрытым элементам.

Улучшенные визуальные подсказки

  • Пустой элемент управления CheckedListBox теперь отображает индикатор фокуса при получении фокуса. Примечание. Поддержка автоматизации пользовательского интерфейса включена для элементов управления во время выполнения, но не используется во время разработки. Обзор автоматизации пользовательского интерфейса см. в разделе Общие сведения об автоматизации пользовательского интерфейса.

Вызов подсказок по элементам управления с помощью клавиатуры

  • Подсказки по элементам управления теперь можно вызвать с помощью перехода на элемент управления с использованием клавиатуры. Эта функция должна быть включена явным образом для приложения (см. раздел "Как отказаться от этих изменений")
Имя. Значение
Область Основная
Версия 4,8
Тип Изменение целевой платформы

Windows Presentation Foundation (WPF)

Улучшения специальных возможностей в WPF

Сведения

Улучшения режима высокой контрастности

  • Фокус для элемента управления Expander теперь отображается. В предыдущих версиях .NET Framework это было не так.
  • При выборе элементов управления CheckBox и RadioButton текст в них более удобен для восприятия по сравнению с предыдущими версиями .NET Framework.
  • Граница отключенного элемента ComboBox теперь отображается тем же цветом, что и его текст. В предыдущих версиях .NET Framework это было не так.
  • Отключенные и находящиеся в фокусе кнопки теперь используют правильный цвет темы. В предыдущих версиях .NET Framework это было не так.
  • Теперь, когда для стиля элемента управления ComboBox задано значение ToolBar.ComboBoxStyleKey, отображается кнопка раскрывающегося списка. В предыдущих версиях .NET Framework это было не так.
  • Для индикатора стрелки направления сортировки в элементе управления DataGrid теперь используются цвета темы. В предыдущих версиях .NET Framework это было не так.
  • Стиль по умолчанию для гиперссылки теперь изменяется на соответствующий цвет темы при наведении указателя мыши. В предыдущих версиях .NET Framework это было не так.
  • Теперь отображается фокус клавиатуры на переключателях. В предыдущих версиях .NET Framework это было не так.
  • Для столбца флажков элемента управления DataGrid теперь используются соответствующие цвета, отражающие фокус клавиатуры. В предыдущих версиях .NET Framework это было не так.
  • Визуальные элементы фокуса клавиатуры теперь отображаются на элементах управления ComboBox и ListBox. В предыдущих версиях .NET Framework это было не так.

Улучшения взаимодействия со средством чтения с экрана

  • Средства чтения с экрана теперь правильно объявляют элементы управления Expander как группы (развертывание/свертывание).
  • Средства чтения с экрана теперь правильно объявляют элементы управления DataGridCell как ячейки сетки данных (локализованные).
  • Средства чтения с экрана теперь объявляют имя редактируемого элемента управления ComboBox.
  • Элементы управления PasswordBox больше не объявляются с ошибкой «Не выбран элемент для просмотра» в средствах чтения с экрана.

Поддержка динамических областей

Средства чтения с экрана, такие как экранный диктор, помогают людям понять пользовательский интерфейс приложения, обычно путем описания элемента пользовательского интерфейса, который в данный момент находится в фокусе. Однако если элемент пользовательского интерфейса изменяется в каком-либо месте экрана и находится не в фокусе, пользователь может не получить уведомление и пропустить важные сведения. Решить эту проблему позволяет применение динамических областей. Разработчик может использовать их для информирования средства чтения с экрана или любого другого клиента автоматизации пользовательского интерфейса о важных изменениях элемента пользовательского интерфейса. После этого средство чтения с экрана может решить, уведомлять ли пользователя об этом изменении. Свойство LiveSetting также позволяет средствам чтения с экрана узнать, насколько важно информировать пользователя о произошедшем в пользовательском интерфейсе изменении.

Предложение

Как принять или отклонить изменения

Чтобы эти изменения можно было использовать в приложении, оно должно быть запущено на платформе .NET Framework 4.7.1 или более поздней версии. В приложении эти изменения можно использовать одним из следующих способов:

  • Целевая платформа .NET Framework 4.7.1. Рекомендуем использовать этот подход. Эти специальные возможности включены по умолчанию для приложений WPF, ориентированных на .NET Framework 4.7.1 или более поздней версии.

  • Для отказа от функций специальных возможностей предыдущих версий переключатель AppContext добавляется в раздел <runtime> файла конфигурации приложения и получает значение false, как показано в следующем примере.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
      </startup>
      <runtime>
        <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false'  -->
        <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
      </runtime>
    </configuration>
    

В приложениях, предназначенных для .NET Framework 4.7.1 или более поздней версии, где требуется сохранить предыдущие функции специальных возможностей, можно выбрать прежние функции специальных возможностей, явно установив этот переключатель AppContext в значение true. Обзор автоматизации пользовательского интерфейса см. в разделе Общие сведения об автоматизации пользовательского интерфейса.

Имя. Значение
Область Основная
Версия 4.7.1
Тип Изменение целевой платформы

Затронутые API

Добавление открытого свойства SelectionTextBrush при выделении текстового поля или поля пароля без графического элемента

Сведения

В приложениях WPF при выделении текста без графических элементов для TextBox и PasswordBox разработчики теперь могут задать новое свойство SelectionTextBrush, чтобы изменить отрисовку выбранного текста. По умолчанию этот цвет меняется с HighlightTextBrushKey. Если выделение текста без использования графического элемента не включено, это свойство ничего не делает.

Предложение

Если выделение текста без графического элемента включено, вы можете использовать свойство PasswordBox.SelectionTextBrush и SelectionTextBrush для изменения внешнего вида выбранного текста. Это можно сделать с помощью XAML:

<TextBox SelectionBrush="Red" SelectionTextBrush="White"  SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
Имя. Значение
Область Основная
Версия 4,8
Тип Изменение целевой платформы

Затронутые API

HwndHost теперь правильно изменяет размеры дочерних HWND во время изменений DPI

Сведения

В .NET Framework 4.7.2 и более ранних версий при запуске WPF в режиме поддержки на уровне монитора элементы управления, размещенные в HwndHost, имели неправильный размер после изменения DPI, например при перемещении приложений с одного монитора на другой. Это исправление гарантирует, что размещенные элементы управления правильно изменяют размер.

Предложение

Чтобы приложение могло использовать эти изменения, необходимо запустить его на платформе .NET Framework 4.7.2 или более поздней версии и включить это поведение, установив следующий параметр AppContext в разделе <runtime> файла конфигурации приложения в значение false, как показано в следующем примере.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of &#39;key1=true/false;key2=true/false  -->
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false" />
</runtime>
</configuration>
Имя. Значение
Область Основная
Версия 4,8
Тип Изменение целевой платформы

Windows Workflow Foundation (WF)

Улучшения специальных возможностей в конструкторе рабочих процессов Windows Workflow Foundation (WF)

Сведения

В конструкторе рабочих процессов Windows Workflow Foundation (WF) реализован ряд улучшений, касающихся использования специальных возможностей. К этим улучшениям относятся следующие:

  • Для некоторых элементов управления изменена последовательность табуляции при переходе слева направо и сверху вниз:
  • Окно инициализации корреляции для установки данных корреляции для действия InitializeCorrelation
  • Окно определения содержания для действий Receive, Send, SendReply и ReceiveReply
  • Большее число функций доступно с клавиатуры:
  • При редактировании свойств действия группы свойств можно сворачивать с помощью клавиатуры в том случае, если они впервые получают фокус.
  • Значки предупреждений теперь доступны с клавиатуры.
  • Кнопка дополнительных свойств в окне свойств теперь доступна с клавиатуры.
  • Пользователи теперь могут с помощью клавиатуры получать доступ к элементам заголовка в областях аргументов и переменных в конструкторе рабочих процессов.
  • Улучшена видимость находящихся в фокусе элементов, например в следующих случаях:
  • Добавление строк в сетки данных, используемые конструктором рабочих процессов и конструкторами действий.
  • Переход по клавише TAB между полями в действиях ReceiveReply и SendReply.
  • Установка значений по умолчанию для переменных или аргументов
  • Средства чтения с экрана теперь правильно распознают следующие объекты:
  • Точки останова, установленные в конструкторе рабочих процессов.
  • Действия FlowSwitch<T>, FlowDecision и CorrelationScope.
  • Содержимое действия Receive.
  • Целевой тип действия InvokeMethod.
  • Поле со списком "Исключение" и раздел Finally действия TryCatch.
  • Поле со списком "Тип сообщения", разделитель в окне "Добавить инициализаторы корреляции", окно "Определение содержимого", а также окно "Определение корреляции" в действиях сообщений (Receive, Send, SendReply и ReceiveReply).
  • Переходы и назначения переходов конечного автомата.
  • Заметки и соединители для действий FlowDecision.
  • Контекстные меню действий, вызываемые при щелчке правой кнопкой мыши.
  • Редакторы значений свойств, кнопка "Очистить условия поиска", кнопки сортировки "По категории" и "По алфавиту", а также диалоговое окно "Редактор выражений" в сетке свойств.
  • Величина масштаба в конструкторе рабочих процессов.
  • Разделитель в действиях Parallel и Pick.
  • Действие InvokeDelegate.
  • Окно "Выбор типов" для действий словаря (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue> и т. д.).
  • Окно поиска и выбора типа .NET.
  • Элемент иерархической навигации в конструкторе рабочих процессов.
  • Пользователи, работающие с темами высокой контрастности, обратят внимание на улучшение видимости многих частей конструктора рабочих процессов и его элементов управления, в том числе повышение контрастности между элементами, а также более заметные поля выбора для элементов, находящихся в фокусе.

Предложение

Если в вашем приложении повторно размещается конструктор рабочих процессов, чтобы использовать эти улучшения, необходимо выполнить следующие действия:

  • Выполните повторную компиляцию приложения, чтобы ориентировать его на платформу .NET Framework 4.7.1. По умолчанию эти новые специальные возможности включены.
  • Если ваше приложение предназначено для .NET Framework 4.7 или более ранней версии, но выполняется в .NET Framework 4.7.1, вы можете отключить старые функции специальных возможностей, добавив следующий переключатель AppContext в раздел <runtime> файла app.config и присвоив ему значение false, как показано в следующем примере.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
  </runtime>
</configuration>

В приложениях, предназначенных для .NET Framework 4.7.1 или более поздней версии, где требуется сохранить предыдущие функции специальных возможностей, можно выбрать прежние функции специальных возможностей, явно установив этот переключатель AppContext в значение true.

Имя. Значение
Область Незначительный
Версия 4.7.1
Тип Изменение целевой платформы

Контрольные суммы рабочего процесса XAML для символов изменены с SHA1 на SHA256

Сведения

Для поддержки отладки в Visual Studio среда выполнения рабочего процесса создает контрольную сумму для файла XAML рабочего процесса, используя алгоритм хэширования. В .NET Framework 4.6.2 и более ранних версий для хэширования контрольной суммы рабочего процесса использовался алгоритм MD5, что приводило к проблемам в системах с поддержкой стандарта FIPS. Начиная с .NET Framework 4.7 алгоритм по умолчанию изменен на SHA-1. Начиная с .NET Framework 4.8 алгоритм по умолчанию изменен на SHA256.

Предложение

Если код не может загрузить экземпляры рабочих процессов или найти подходящие символы из-за ошибки контрольной суммы, попробуйте установить для параметра AppContext "Switch.System.Activities.UseSHA1HashForDebuggerSymbols" значение true. В коде:

System.AppContext.SetSwitch("Switch.System.Activities.UseSHA1HashForDebuggerSymbols", true);

Или в конфигурации:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseSHA1HashForDebuggerSymbols=true" />
  </runtime>
</configuration>
Имя. Значение
Область Незначительный
Версия 4,8
Тип Изменение целевой платформы

Определение рабочего процесса XOML и ключи кэша SqlTrackingService переведены с MD5 на SHA256

Сведения

Среда выполнения рабочих процессов хранит кэш определений рабочих процессов, определенных в XOML. SqlTrackingService также хранит кэш с ключом по строкам. Эти кэши идентифицируются по значениям, которые включают хэш-значение контрольной суммы. В .NET Framework 4.7.2 и более ранних версий для хэширования этой контрольной суммы использовался алгоритм MD5, что приводило к проблемам в системах с поддержкой стандарта FIPS. Начиная с .NET Framework 4.8 используется алгоритм SHA256. Так как значения вычисляются при каждом запуске среды выполнения рабочих процессов и службы SqlTrackingService, не должно возникнуть проблем совместимости с этим изменением. Тем не менее мы предоставили исправления, чтобы позволить клиентам вернуться к использованию устаревшего алгоритма хэширования при необходимости.

Предложение

Если это изменение вызывает проблему при выполнении рабочих процессов, установите для одного или обоих параметров AppContext:

  • "Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey" для true.
  • "Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey" для true. В коде:
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey", true);
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey", true);

Или в файле конфигурации (это необходимо сделать в файле конфигурации приложения, который создает объект WorkflowRuntime):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
Имя. Значение
Область Незначительный
Версия 4,8
Тип Изменение целевой платформы

Контрольные суммы файла XOML рабочего процесса переведены с MD5 на SHA256

Сведения

Для поддержки отладки рабочих процессов на основе XOML с помощью Visual Studio при сборке проектов рабочих процессов, содержащих файлы XOML, контрольная сумма содержимого файла XOML включается в сгенерированный код как значение WorkflowMarkupSourceAttribute.MD5Digest. В .NET Framework 4.7.2 и более ранних версий для хэширования этой контрольной суммы использовался алгоритм MD5, что приводило к проблемам в системах с поддержкой стандарта FIPS. Начиная с .NET Framework 4.8 используется алгоритм SHA256. Для совместимости с WorkflowMarkupSourceAttribute.MD5Digest используются только первые 16 байтов сгенерированной контрольной суммы. Это может приводить к проблемам при отладке. Может потребоваться повторная сборка проекта.

Предложение

Если повторное построение проекта не решает проблему, попробуйте задать AppContext для параметра Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum значение true. В коде:

System.AppContext.SetSwitch("Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum", true);

Или в файле конфигурации (это должен быть файл MSBuild.exe.config для используемой программы MSBuild.exe):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
Имя. Значение
Область Незначительный
Версия 4,8
Тип Изменение целевой платформы

платформа .NET Framework 4.8.1

Проблемы совместимости приложений не появились в платформа .NET Framework 4.8.1.