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


Перенацеливание изменений для миграции на .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>
Имя Ценность
Размах Край
Версия 4.8
Тип Перенацеливание

Затронутые API

Windows Forms

Улучшения доступности в элементах управления Windows Forms для .NET 4.8

Подробности

Платформа Windows Forms Framework продолжает улучшать работу с технологиями специальных возможностей для повышения поддержки клиентов 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 элементы управления больше не объявляются как "нет элементов в представлении" средствами чтения с экрана.

поддержка LiveRegion

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

Предложение

Как принять или отказаться от этих изменений

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

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

  • Чтобы отказаться от устаревшего поведения доступности, добавьте следующий AppContext Switch в разделе <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 в TextBox/PasswordBox для выделения, не связанного с украшением.

Подробности

В приложениях 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 запускался в режиме Per-Monitor Aware, элементы управления, размещенные в 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
  • Дополнительные функции доступны с помощью клавиатуры:
  • При редактировании свойств действия группы свойств можно свернуть с помощью клавиатуры при первом фокусе.
  • Значки предупреждений теперь доступны с помощью клавиатуры.
  • Кнопка "Дополнительные свойства" в окне "Свойства" теперь доступна с помощью клавиатуры.
  • Теперь пользователи клавиатуры могут получить доступ к элементам заголовка в панелях аргументов и переменных конструктора рабочих процессов.
  • Улучшенная видимость элементов с фокусом, например, когда:
  • Добавление строк в сетки данных, используемых конструктором рабочих процессов и конструкторами действий.
  • Переключение по полям в действиях ReceiveReply и SendReply.
  • Задание значений по умолчанию для переменных или аргументов
  • Средства чтения с экрана теперь могут правильно распознать следующее:
  • Точки останова, заданные в конструкторе рабочих процессов.
  • Действия FlowSwitch<T>, FlowDecisionи CorrelationScope.
  • Содержимое активности Receive.
  • Целевой тип для действия InvokeMethod.
  • Поле со списком исключений и разделом "Наконец" в действии 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 алгоритм по умолчанию был изменен на SHA1. Начиная с .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.