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

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

.NET Framework 4.7

ASP.NET

HttpRuntime.AppDomainAppPath создает исключение NullReferenceException

Сведения

В платформе .NET Framework 4.6.2 среда выполнения создает исключение T:System.NullReferenceException при получении значения P:System.Web.HttpRuntime.AppDomainAppPath, которое содержит нуль-символы. В .NET Framework 4.6.1 и более ранних версий среда выполнения создает исключение T:System.ArgumentNullException.

Предложение

В ответ на это изменение можно выполнить одно из следующих действий:

  • обрабатывайте T:System.NullReferenceException, если приложение работает на платформе .NET Framework 4.6.2;
  • обновите систему до версии .NET Framework 4.7, в которой восстановлено прежнее поведение, то есть создается исключение T:System.ArgumentNullException.
Имя. Значение
Область Microsoft Edge
Версия 4.6.2
Тип Изменение целевой платформы

Затронутые API

Регулирование одновременных запросов за сеанс

Сведения

В платформе .NET Framework 4.6.2 и более ранних версий ASP.NET выполняет запросы с тем же идентификатором Sessionid последовательно, а ASP.NET всегда выдает Sessionid через файл cookie по умолчанию. Если страница отвечает слишком медленно, при нажатии клавиши F5 в браузере производительность сервера значительно снизится. В исправлении добавлен счетчик, который отслеживает запросы в очереди и завершает запросы, если они превышают заданное ограничение. Значение по умолчанию — 50. Если ограничение достигнуто, в журнал событий записывается предупреждение, а в журнале IIS может быть записан ответ HTTP 500.

Предложение

Чтобы восстановить прежнее поведение, можно добавить следующий параметр в файл web.config для отказа от нового поведения.

<appSettings>
    <add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Имя. Значение
Область Microsoft Edge
Версия 4,7
Тип Изменение целевой платформы

Сеть

Значение по умолчанию ServicePointManager.SecurityProtocol — SecurityProtocolType.System.Default

Сведения

Начиная с приложений, ориентированных на .NET Framework 4.7, свойство ServicePointManager.SecurityProtocol имеет значение SecurityProtocolType.SystemDefault. Это изменение позволяет сетевым API-интерфейсам .NET Framework на основе SslStream (таких как FTP, HTTPS и SMTP) наследовать протоколы безопасности по умолчанию из операционной системы вместо использования жестко запрограммированных значений, определенных в .NET Framework. Значение по умолчанию зависит от операционной системы и пользовательской настройки, выполненной системным администратором. Сведения о протоколе SChannel по умолчанию в каждой версии операционной системы Windows см. в разделе Протоколы TLS/SSL (Schannel SSP).

В приложениях, предназначенных для более ранних версий платформы .NET Framework, значение по умолчанию свойства ServicePointManager.SecurityProtocol зависит от версии целевой платформы .NET Framework. Дополнительные сведения см. в разделе Изменение целевой платформы для миграции с .NET Framework 4.5.2 на 4.6.

Предложение

Это изменение касается только приложений, предназначенных для .NET Framework 4.7 или более поздних версий. Если вы предпочитаете использовать определенный протокол, а не полагаться на параметры системы по умолчанию, можно явно задать значение свойства ServicePointManager.SecurityProtocol. Если это изменение нежелательно, можно отказаться от него, добавив параметр конфигурации в <раздел среды выполнения> файла конфигурации приложения. В следующем примере показан как раздел <runtime>, так и параметр отключения Switch.System.Net.DontEnableSystemDefaultTlsVersions:

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

Затронутые API

SslStream поддерживает TLS оповещения

Сведения

После сбоя подтверждения TLS при первой операции ввода-вывода чтения и записи возникнет System.IO.IOException с внутренним исключением System.ComponentModel.Win32Exception. System.ComponentModel.Win32Exception.NativeErrorCode Код для System.ComponentModel.Win32Exception оповещения TLS можно сопоставить с оповещением TLS от удаленной стороны с помощью кодов ошибок Schannel для оповещений TLS и SSL. Дополнительные сведения см. в разделе RFC 2246: оповещения об ошибках 7.2.2.
Этот режим в .NET Framework 4.6.2 и более ранних версий предполагает, что время ожидания канала транспорта (как правило, TCP-подключения) истечет во время операции записи или чтения, если другой стороне не удалось выполнить подтверждение и она сразу же после этого отклонила подключение.

Предложение

Приложения, вызывающие API сетевого ввода-вывода, такие как Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32), должны обрабатывать IOException или System.TimeoutException.
Начиная с .NET Framework 4.7 функция оповещений TLS включена по умолчанию. Для приложений, предназначенных для версий платформы .NET Framework с 4.0 по 4.6.2, работающих в системе .NET Framework 4.7 или более поздних версий, эта функция будет отключена для сохранения совместимости.
Следующий API конфигурации можно использовать для включения или отключения этой функции для приложений .NET Framework 4.6 и более поздних версий, работающих в среде .NET Framework 4.7 или более поздней версии.

  • Программно: приложение должно быть первым делом, так как ServicePointManager инициализируется только один раз:

    AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true);
    
    // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2.
    AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
    
  • AppConfig:

    <runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/>
      <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. -->
    </runtime>
    
  • Раздел реестра (глобальный компьютер): задайте значение, чтобы false включить функцию в платформа .NET Framework 4.6 – 4.6.2.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Имя. Значение
Область Microsoft Edge
Версия 4,7
Тип Изменение целевой платформы

Затронутые API

Безопасность

CspParameters.ParentWindowHandle теперь ожидает значение HWND

Сведения

Значение ParentWindowHandle, которое появилось в .NET Framework 2.0, позволяет приложению зарегистрировать значение дескриптора родительского окна таким образом, что любой пользовательский интерфейс, необходимый для доступа к ключу (например, запрос ПИН-кода или окно согласия), будет открываться в режиме модального дочернего окна для указанного окна. Начиная с приложений, предназначенных для .NET Framework 4.7, приложение Windows Forms может задавать свойство ParentWindowHandle с кодом, как в следующем примере:

cspParameters.ParentWindowHandle = form.Handle;

В предыдущих версиях платформы .NET Framework ожидалось значение System.IntPtr, указывающее расположение в памяти, где находится значение HWND. Задание свойства для формы. Дескриптор в Windows 7 и более ранних версиях не влиял, но в Windows 8 и более поздних версиях он приводит к ошибке:System.Security.Cryptography.CryptographicException параметр является неверным.

Предложение

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

cspParameters.ParentWindowHandle = form.Handle;

Пользователи, которые определили, что правильным значением для передачи был адрес области памяти, в которой содержалось значение form.Handle, могут отказаться от этого изменения в поведении, установив для параметра AppContext Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle значение true:

  • Путем программной установки параметров совместимости в AppContext, как описано здесь.
  • путем добавления следующей строки в раздел <runtime> файла app.config:
<runtime>
 <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>

Пользователи, которые хотят использовать новое поведение в среде выполнения .NET Framework 4.7, когда приложения загружаются в более ранних версиях платформы .NET Framework, могут задать переключателю AppContext значение false.

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

Затронутые API

SslStream поддерживает TLS оповещения

Сведения

После сбоя подтверждения TLS при первой операции ввода-вывода чтения и записи возникнет System.IO.IOException с внутренним исключением System.ComponentModel.Win32Exception. System.ComponentModel.Win32Exception.NativeErrorCode Код для System.ComponentModel.Win32Exception оповещения TLS можно сопоставить с оповещением TLS от удаленной стороны с помощью кодов ошибок Schannel для оповещений TLS и SSL. Дополнительные сведения см. в разделе RFC 2246: оповещения об ошибках 7.2.2.
Этот режим в .NET Framework 4.6.2 и более ранних версий предполагает, что время ожидания канала транспорта (как правило, TCP-подключения) истечет во время операции записи или чтения, если другой стороне не удалось выполнить подтверждение и она сразу же после этого отклонила подключение.

Предложение

Приложения, вызывающие API сетевого ввода-вывода, такие как Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32), должны обрабатывать IOException или System.TimeoutException.
Начиная с .NET Framework 4.7 функция оповещений TLS включена по умолчанию. Для приложений, предназначенных для версий платформы .NET Framework с 4.0 по 4.6.2, работающих в системе .NET Framework 4.7 или более поздних версий, эта функция будет отключена для сохранения совместимости.
Следующий API конфигурации можно использовать для включения или отключения этой функции для приложений .NET Framework 4.6 и более поздних версий, работающих в среде .NET Framework 4.7 или более поздней версии.

  • Программно: приложение должно быть первым делом, так как ServicePointManager инициализируется только один раз:

    AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true);
    
    // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2.
    AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
    
  • AppConfig:

    <runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/>
      <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. -->
    </runtime>
    
  • Раздел реестра (глобальный компьютер): задайте значение, чтобы false включить функцию в платформа .NET Framework 4.6 – 4.6.2.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Имя. Значение
Область Microsoft Edge
Версия 4,7
Тип Изменение целевой платформы

Затронутые API

Windows Communication Foundation (WCF)

Сериализация управляющих символов с помощью DataContractJsonSerializer теперь совместима с ECMAScript версии 6 и 8

Сведения

В .NET Framework 4.6.2 и более ранних версиях объект System.Runtime.Serialization.Json.DataContractJsonSerializer сериализовал некоторые специальные управляющие символы, например \b, \f и \t, не так, как требуют стандарты ECMAScript версии 6 и 8. Начиная с .NET Framework 4.7, сериализация таких управляющих символов совместима с ECMAScript версий 6 и 8.

Предложение

В приложениях, предназначенных для .NET Framework 4.7, эта функция включена по умолчанию. Если оно нежелательно, данную функцию можно отключить, добавив следующую строку в раздел <runtime> файла app.config или web.config:

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

Затронутые API

Для безопасности сообщений WCF теперь могут использоваться TLS1.1 и TLS1.2

Сведения

Начиная с .NET Framework 4.7 клиенты могут настроить в параметрах конфигурации приложения не только SSL3.0 и TLS1.0, но и TLS1.1 или TLS1.2.

Предложение

В .NET Framework 4.7 поддержка TLS1.1 и TLS1.2 в безопасности сообщений WCF по умолчанию отключена. Вы можете включить ее, добавив следующую строку в раздел <runtime> файла app.config или web.config:

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

Windows Presentation Foundation (WPF)

Вызовы System.Windows.Input.PenContext.Disable в системах с поддержкой сенсорного ввода могут вызвать исключение ArgumentException

Сведения

В некоторых случаях вызовы внутреннего метода System.Windows.Intput.PenContext.Disable в системах с поддержкой сенсорного ввода могут вызывать необработанное исключение T:System.ArgumentException из-за повторного входа.

Предложение

Эта проблема была устранена в .NET Framework 4.7. Чтобы это исключение не возникало, выполните обновление до версии платформы .NET Framework 4.7 или более поздней.

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

NullReferenceException в коде обработки исключений из ImageSourceConverter.ConvertFrom

Сведения

Ошибка в коде обработки исключений для ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) вызывала некорректное исключение System.NullReferenceException вместо предполагаемого исключения (System.IO.DirectoryNotFoundException или System.IO.FileNotFoundException). Это изменение устраняет эту ошибку. Теперь метод вызывает правильное исключение.

По умолчанию все приложения, предназначенные для .NET Framework 4.6.2 и более ранних версий, по-прежнему вызывают исключение System.NullReferenceException для обеспечения совместимости. Разработчики приложений, предназначенных для .NET Framework 4.7 и более поздних версий, должны видеть правильные исключения.

Предложение

Разработчики, желающие по-прежнему получать System.NullReferenceException при работе с .NET Framework 4.7 и более поздних версий, могут добавить следующее в файл App.config приложения:

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
Имя. Значение
Область Microsoft Edge
Версия 4,7
Тип Изменение целевой платформы

Затронутые API

Выделение пространства для *-столбцов в элементе Grid WPF

Сведения

Начиная с платформа .NET Framework 4.7 WPF заменяет алгоритм, Grid который используется для выделения пространства для *-столбцов. В результате изменяется фактическая ширина, назначенная *-столбцам в ряде случаев:

  • Если один или несколько столбцов *-столбцов также имеют минимальную или максимальную ширину, которая переопределяет пропорциональное выделение для этого столбца. (Минимальная ширина может быть производным от явного объявления MinWidth или от неявного минимального значения, полученного из содержимого столбца. Максимальная ширина может быть определена только явным образом из объявления MaxWidth.)
  • Когда один или несколько *-столбцов объявляют слишком большой *-вес — более 10^298.
  • Когда *-веса достаточно отличаются, приводя к нестабильности операций с плавающей запятой (переполнение, нехватка данных, потеря точности).
  • Когда включено округление макета, а действующее значение DPI дисплея достаточно высокое. В первых двух случаях значения ширины, создаваемые новым алгоритмом, могут значительно отличаться от созданных старым алгоритмом; в последнем случае разница будет равна максимум одному или двум пикселям.

Новый алгоритм устраняет некоторые ошибки, присутствующие в старом алгоритме:

  • Общее выделенное пространство для столбцов может превышать ширину сетки. Это может произойти при выделении пространства для столбца, пропорциональная доля которого меньше его минимального размера. Алгоритм выделяет минимальный размер, что уменьшает пространство, доступное для других столбцов. Если не осталось *-столбцов для выделения, общее выделенное пространство будет слишком большим.

  • Общее выделенное пространство может быть меньше ширины сетки. Эта смежная с первой проблема возникает при выделении пространства для столбца, пропорциональная доля которого больше его максимального размера, когда не остается *-столбцов для заполнения зарезервированного пространства.

  • Два *-столбца могут получить выделенное пространство, непропорциональное их весу. Это более мягкая версия первой или второй проблемы возникает при выделении пространства для *-столбцов A, B и C (в таком порядке), когда пропорциональная доля столбца B нарушает его минимальное (или максимальное) ограничение. Как описано выше, это изменяет пространство, доступное для столбца C, который получает меньшее (или более) пропорциональное выделение, чем A.

  • Все столбцы с очень большим весом (>10^298) обрабатываются так, как если бы у них был вес 10^298. Пропорциональные различия между ними (и между столбцами с немного меньшим весом) не учитываются.

  • Столбцы с бесконечным весом не обрабатываются правильно. (На самом деле вы не можете задать вес бесконечности, но это искусственное ограничение. Код выделения пытается справиться с ним, но выполняет плохое задание.)

  • Несколько незначительных проблем при предотвращении переполнения, переполнения, потери точности и аналогичных проблем с плавающей запятой.

  • Корректировки округления макета неверны при достаточно высоком DPI. Новый алгоритм выдает результаты, соответствующие следующим критериям:

    • Фактическая ширина, назначенная *-столбцу, никогда не меньше его минимальной ширины и не больше максимальной ширины.
    • Каждый столбец *-column, не назначенный минимальной или максимальной ширине, назначается ширина, пропорциональная ее *-вес. Чтобы быть точным, если два столбца объявляются с шириной x* и y* соответственно, и если ни один столбец не получает минимальную или максимальную ширину, фактические ширины v и w, назначенные столбцам, находятся в той же пропорции: v /w == x /y.
    • Общая ширина, выделенная для "пропорциональных" *-столбцов, равна пространству, доступному после выделения ограниченным столбцам (фиксированным, автоматическим и *-столбцам, выделенным их минимальной или максимальной шириной). Это значение может быть равно нулю, например, если сумма минимальных значений ширины превышает доступную ширину сетки.
    • Все эти инструкции должны интерпретироваться по отношению к гипотетическому идеальному макету. Если действует округление макета, фактические значения ширины могут отличаться от идеальных максимум на один пиксель.

Примечание.

Все, что говорится о столбцах и ширине в этой статье, относится к строкам и высотам.

Предложение

По умолчанию приложения, предназначенные для версий .NET Framework 4.7 и выше, будут использовать новый алгоритм, а приложения, предназначенные для .NET Framework 4.6.2 и более ранних версий, — старый алгоритм.

Чтобы переопределить настройку по умолчанию, используйте следующий параметр конфигурации:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>

Значение true позволяет выбрать старый алгоритм, а false — новый.

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

Стек сенсорного управления WPF на основе указателя

Сведения

Это изменение добавляет возможность включать необязательный стек сенсорного управления или пера WPF на основе WM_POINTER. Разработчики, которые явно не включают эту поддержку, не должны заметить изменений в поведении сенсорного управления или пера WPF. Известные на данный момент проблемы с необязательным стеком сенсорного управления или пера на основе WM_POINTER:

  • Не поддерживается рукописный ввод в режиме реального времени.
  • Хотя подключаемые модули рукописного ввода и пера продолжают работать, они обрабатываются в потоке пользовательского интерфейса, что может вести к снижению производительности.
  • Изменения поведения из-за изменений в переходе от событий сенсорного управления или пера к событиям мыши.
  • Обработка может выполняться по-разному.
  • При перетаскивании не будет показана соответствующая реакция на сенсорный ввод
  • (это не влияет на ввод с помощью пера).
  • Перетаскивание больше нельзя инициировать при событиях сенсорного управления или пера.
  • Это потенциально может вызвать зависание приложения до обнаружения ввода с помощью мыши.
  • Вместо этого разработчикам следует инициировать перетаскивание с помощью событий мыши.

Предложение

Разработчики, желающие включить этот стек, могут добавить следующую информацию в файл app.config своего приложения:

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>

Удаление этого параметра или присвоение ему значения false позволяет отключить этот необязательный стек. Обратите внимание, что этот стек доступен только в Windows 10 Creators Update и более поздних версий.

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

Windows Workflow Foundation (WF)

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

Сведения

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

Предложение

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

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

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

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

.NET Framework 4.7.1

ASP.NET

Усовершенствованные специальные возможности ASP.NET в .NET Framework 4.7.1

Сведения

Начиная с .NET Framework 4.7.1 в ASP.NET улучшена работа веб-элементов управления ASP.NET с технологией специальных возможностей в Visual Studio для удобства клиентов ASP.NET. Внесены следующие изменения:

  • Изменения для реализации отсутствующих шаблонов специальных возможностей пользовательского интерфейса в элементах управления, например в диалоговом окне Добавить поле в мастере представления сведений или в диалоговом окне Настройка ListView в мастере ListView.
  • Изменения для улучшенного отображения в режиме высокой контрастности, например в редакторе полей страничного навигатора данных.
  • Изменения для улучшения навигации с помощью клавиатуры для таких элементов, как диалоговое окно "Поля" в мастере "Изменить поля страничного навигатора" средства управления DataPager, диалоговое окно "Настройка ObjectContext" или диалоговое окно "Настройка выбора данных" в мастере "Настройка источника данных".

Предложение

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

  • Установите Visual Studio 2017 15.3 или более поздней версии, которая поддерживает новые функции специальных возможностей со следующим переключателем AppContext по умолчанию.
  • Откажитесь от функций специальных возможностей в предыдущих версиях, добавив переключатель AppContext Switch.UseLegacyAccessibilityFeatures в раздел <runtime> файла конфигурации devenv.exe.config и установив значение false, как показано в следующем примере.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<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
Тип Изменение целевой платформы

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

Исключения фонового потока SerialPort

Сведения

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

Предложение

Для приложений, предназначенных для .NET Framework 4.7.1, можно отказаться от обработки исключений, добавив следующую строку в раздел <runtime> файла app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>

Для приложений, которые предназначены для более ранних версий .NET Framework, но выполняются в .NET Framework 4.7.1 или более поздней версии, можно включить обработку исключений, добавив следующую строку в раздел <runtime> файла app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Имя. Значение
Область Незначительный
Версия 4.7.1
Тип Изменение целевой платформы

Затронутые API

ServiceBase не распространяет исключения OnStart

Сведения

В .NET Framework 4.7 и более ранних версий исключения, возникшие при запуске службы, не распространяются на вызывающий объект ServiceBase.Run.

Начиная с приложений, предназначенных для .NET Framework 4.7.1, среда выполнения распространяет исключения в ServiceBase.Run для служб, которые не удается запустить.

Предложение

Если при запуске службы есть исключение, оно будет распространяться. Это поможет диагностировать случаи сбоя запуска служб.

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

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />

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

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Имя. Значение
Область Незначительный
Версия 4.7.1
Тип Изменение целевой платформы

Затронутые API

Безопасность

Алгоритмы SignedXML и SignedXMS по умолчанию изменены на SHA256

Сведения

В .NET Framework 4.7 и более ранних версий SignedXML и SignedCMS по умолчанию изменены на SHA-1 для некоторых операций. Начиная с .NET Framework 4.7.1 по умолчанию для этих операций включен SHA256. Это изменение было необходимо, поскольку алгоритм SHA-1 больше не считается безопасным.

Предложение

Существует два новых значения переключения контекста для выбора алгоритма SHA-1 (небезопасно) или SHA256 по умолчанию:

  • Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
  • Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms Если в приложениях, предназначенных для .NET Framework 4.7.1 и более поздних версий, использовать SHA256 нежелательно, можно изменить алгоритм по умолчанию на SHA1, добавив следующую конфигурацию в раздел runtime файла конфигурации приложения:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />

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

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Имя. Значение
Область Незначительный
Версия 4.7.1
Тип Изменение целевой платформы

Затронутые API

SignedXml.GetPublicKey возвращает RSACng в net462 (или lightup) без изменения целевой платформы

Сведения

Начиная с .NET Framework 4.6.2 конкретный тип объекта, возвращаемого методом SignedXml.GetPublicKey, изменен (без особенностей) с реализации CryptoServiceProvider на реализацию Cng. Это связано с изменениями реализации, предусматривающими использование certificate.PublicKey.Key вместо внутреннего certificate.GetAnyPublicKey с переадресацией к RSACertificateExtensions.GetRSAPublicKey.

Предложение

Начиная с приложений, выполняющихся в .NET Framework 4.7.1, вы можете использовать реализацию CryptoServiceProvider, используемую по умолчанию на платформе .NET Framework 4.6.1 и более ранних версий, добавив следующую конфигурацию в раздел runtime файла конфигурации приложения:

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

Затронутые API

Windows Communication Foundation (WCF)

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

Сведения

В пакете SDK .NET Framework 4.7.1 в средствах SvcConfigEditor.exe и SvcTraceViewer.exe были устранены различные проблемы со специальными возможностями. В основном это были незначительные проблемы, например не определялось имя или некорректно реализовывались шаблоны автоматизации пользовательского интерфейса. Многие пользователи могли не замечать неверные значения, но клиентам, применяющим вспомогательные технологии, такие как средства чтения с экрана, будет проще использовать эти средства пакета SDK. Безусловно, эти исправления влияют на предыдущее поведение, например порядок фокуса клавиатуры. Чтобы получить все исправления специальных возможностей в этих средствах, выполните следующее в файле app.config:

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

Windows Forms

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

Сведения

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

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

Предложение

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

  • Выполнить повторную компиляцию, чтобы нацелить приложение на .NET Framework 4.7.1. Эти специальные возможности включены по умолчанию для приложений Windows Forms, ориентированных на .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.

Обзор автоматизации пользовательского интерфейса см. в разделе Общие сведения об автоматизации пользовательского интерфейса.

Добавлена поддержка шаблонов и свойств автоматизации пользовательского интерфейса

Клиенты специальных возможностей могут использовать новые функции WinForms с помощью общедоступных и описанных шаблонов вызова. Эти шаблоны предназначены не только для WinForms. Например, клиенты специальных возможностей могут вызывать метод QueryInterface для интерфейса IAccessible (MAAS), чтобы получить интерфейс IServiceProvider. Если этот интерфейс доступен, клиенты могут использовать его метод QueryService для запроса интерфейса IAccessibleEx. Дополнительные сведения см. в разделе Использование интерфейса IAccessibleEx из клиента. Начиная с версии .NET Framework 4.7.1 интерфейсы IServiceProvider и IAccessibleEx (где применимо) доступны объектам специальных возможностей WinForms.

платформа .NET Framework 4.7.1 добавляет поддержку следующих шаблонов и свойств автоматизации пользовательского интерфейса:

  • Элементы управления ToolStripSplitButton и ComboBox поддерживают шаблон развертывания/свертывания.

  • Элемент управления ToolStripMenuItem использует для свойства ControlType значение ControlType.MenuItem.

  • Элемент управления ToolStripItem поддерживает свойство NameProperty и шаблон развертывания/свертывания.

  • Элемент управления ToolStripDropDownItem поддерживает AccessibleEvents с указанием StateChange и NameChange при развертывании или свертывании раскрывающегося списка.

  • Элемент управления ToolStripDropDownButton использует для свойства ControlType значение ControlType.MenuItem.

  • Элемент управления DataGridViewCheckBoxCell поддерживает TogglePattern.

  • Элементы управления NumericUpDown и DomainUpDown поддерживают свойство NameProperty и используют для ControlType значение ControlType.Spinner.

    Улучшения элемента управления PropertyGrid В .NET Framework 4.7.1 добавлены следующие улучшения браузерного элемента управления PropertyBrowser:

  • Кнопка Подробнее в диалоговом окне ошибки, которое появляется при вводе пользователем неверного значения в элемент управления PropertyGrid, поддерживает шаблон развертывания/свертывания, уведомления об изменении имени и состояния, а также свойство ControlType со значением ControlType.MenuItem.

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

  • Строки AccessibleRole элемента PropertyGrid управления изменились с "Строка" на "Ячейка". Ячейка сопоставляется с UIA ControlType "DataItem", что позволяет поддерживать соответствующие сочетания клавиш и объявления экранного диктора.

  • Строки элемента управления PropertyGrid, которые представляют элементы заголовка в том случае, если для элемента управления PropertyGrid свойство PropertySort имеет значение PropertySort.Categorized, имеют значение свойства ControlType, равное ControlType.Button.

  • Строки PropertyGrid элементов управления, представляющие элементы заголовка, когда PropertyGrid элемент управления имеет PropertySort свойство, которое поддерживает PropertySort.Categorizedшаблон Expand/Collapse.

  • Улучшена навигация с помощью клавиатуры между сеткой и расположенной над ней панелью инструментов. Теперь нажатие клавиши SHIFT-TAB выбирает первую кнопку Панели инструментов, а не всю панель инструментов.

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

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

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

  • Элементы панели инструментов для элемента управления PropertyGrid, которые указывают текущее значение свойства PropertySort, поддерживают TogglePattern.

  • Улучшенная поддержка экранного диктора для различения выбранного режима выравнивания в соответствующем средстве.

  • Если в форме отображается пустой элемент управления PropertyGrid, он будет получать фокус в тех случаях, в которых это ранее не происходило.

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

  • Элементы управления Button и CheckBox, для которых свойству FlatStyle присвоено значение FlatStyle.System (стиль по умолчанию), теперь используют определенные в ОС цвета при выборе темы высокой контрастности. Ранее цвета текста и фона не были контрастными, что ухудшало разборчивость.
  • Элементы управления Button, CheckBox, RadioButton, Label, LinkLabel и GroupBox, для которых свойству Enabled присвоено значение false, использовали затененный цвет для отображения текста в темах высокой контрастности, в результате чего не обеспечивался достаточный контраст между текстом и фоном. Теперь эти элементы управления используют цвет "Отключенный текст", определенный ОС. Это исправление применяется к элементам управления, для которых свойству FlatStyle присвоено значение, отличное от FlatStyle.System. Последние элементы управления отображаются операционной системой.
  • DataGridView теперь отображает видимый прямоугольник вокруг содержимого ячейки, в которой в данный момент установлен фокус. Ранее в некоторых темах высокой контрастности этот прямоугольник был незаметен.
  • ToolStripMenuItem элементы управления со значением Enabledfalse теперь используют цвет "Отключенный текст", определенный ОС.
  • Элементы управления ToolStripMenuItem, для которых свойству Checked присвоено значение true, теперь отображают соответствующий флажок с использованием контрастного системного цвета. Ранее цвет флажка был недостаточно контрастным, в результате чего он был не виден в некоторых темах высокой контрастности. ПРИМЕЧАНИЕ. В Windows 10 изменены значения некоторых системных цветов для тем высокой контрастности. Платформа Windows Forms Framework построена на основе Win32. Для достижения наилучших результатов используйте самую последнюю версию Windows и согласитесь на последние изменения операционной системы, добавив файл app.manifest в тестовое приложение и раскомментировав следующий код:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Улучшение навигации с помощью клавиатуры

  • Если для элемента управления ComboBox свойство DropDownStyle имеет значение ComboBoxStyle.DropDownList и он является первым элементом управления на вкладке формы, при открытии родительской формы с помощью клавиатуры он теперь отображает прямоугольник фокуса. До этого изменения фокус устанавливался в этот элемент управления, однако индикатор фокуса не отображался.

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

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

  • Элемент управления CheckedListBox теперь направляет в экранный диктор уведомления об изменении свойства CheckBox.CheckState. Ранее экранный диктор не получал уведомления, в результате чего пользователи на знали об обновлении свойства CheckState.

  • Для элемента управления LinkLabel изменился способ уведомления экранного диктора о тексте элемента управления. Ранее экранный диктор дважды объявил этот текст и прочитал символы "&" как реальный текст, даже если они не видны пользователю. Дублированный текст был удален из объявлений экранного диктора, а также ненужных символов "&".

  • Типы элемента управления DataGridViewCell теперь корректно сообщают о состоянии только для чтения экранному диктору и другим вспомогательным технологиям.

  • Экранный диктор теперь может считывать системное меню дочерних окон в приложении [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md).

  • Экранный диктор теперь может читать элементы управления ToolStripMenuItem, для которых свойству ToolStripItem.Enabled присвоено значение false. Ранее экранный диктор не мог получить фокус для отключенных пунктов меню, чтобы считывать их содержимое.

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

Затронутые API

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

Событие SelectionChanged и свойство SelectedValue селектора

Сведения

Начиная с .NET Framework 4.7.1 Selector всегда обновляет значение своего свойства SelectedValue до порождения события SelectionChanged при изменении его выбора. Это позволяет согласовать свойство SelectedValue с другими свойствами выбора (SelectedItem и SelectedIndex), которые изменяются перед порождением события.

В .NET Framework 4.7 и более ранних версий изменение SelectedValue в большинстве случаев происходило до события, но оно выполнялось после события, если изменение выбора было вызвано изменением свойства SelectedValue.

Предложение

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

<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>

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

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Имя. Значение
Область Незначительный
Версия 4.7.1
Тип Изменение целевой платформы

Затронутые API

Событие SelectionChanged и свойство SelectedContent для TabControl

Сведения

Начиная с версии .NET Framework 4.7.1, TabControl обновляет значение своего свойства SelectedContent до того, как создать событие SelectionChanged, даже в случае изменения выделения. В .NET Framework 4.7 и более ранних версий обновление SelectedContent происходило после создания события.

Предложение

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

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>

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

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Имя. Значение
Область Незначительный
Версия 4.7.1
Тип Изменение целевой платформы

Затронутые API

В качестве хэш-алгоритма по умолчанию для PackageDigitalSignatureManager WPF теперь используется SHA256

Сведения

System.IO.Packaging.PackageDigitalSignatureManager реализует функции цифровой подписи для пакетов WPF. В .NET Framework 4.7 и более ранних версиях для подписывания частей пакетов по умолчанию использовался хэш-алгоритм SHA1 (PackageDigitalSignatureManager.DefaultHashAlgorithm). С учетом выявленных проблем с безопасностью SHA1, начиная с версии .NET Framework 4.7.1, теперь по умолчанию используется алгоритм SHA256. Это изменение затрагивает все операции подписывания пакетов, включая документы XPS.

Предложение

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

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
Имя. Значение
Область Microsoft Edge
Версия 4.7.1
Тип Изменение целевой платформы

Затронутые API

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
Тип Изменение целевой платформы

.NET Framework 4.7.2.

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

Разрешить двунаправленные управляющие символы Юникода в URI

Сведения

Юникод определяет несколько специальных управляющих символов, используемых для указания ориентации текста. В предыдущих версиях платформы .NET Framework эти символы ошибочно удалялись из всех URI, даже если были представлены в процентной кодировке. В целях соблюдения стандарта RFC 3987 теперь мы разрешаем эти символы в URI. При обнаружении незакодированных символов в URI выполняется процентное кодирование. Символы в процентной кодировке остаются без изменений.

Предложение

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

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>

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

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Имя. Значение
Область Незначительный
Версия 4.7.2
Тип Изменение целевой платформы

Затронутые API

DeflateStream использует собственные интерфейсы API для распаковки

Сведения

Начиная с .NET Framework 4.7.2 реализация распаковки в классе T:System.IO.Compression.DeflateStream была изменена и теперь использует собственные API Windows по умолчанию. Как правило, это приводит к значительному повышению производительности. Во всех приложениях .NET, предназначенных для .NET Framework 4.7.2 или более поздней версии, используется собственная реализация. Это изменение может привести к некоторым отличиям в поведении, в том числе:

  • Могут отличаться сообщения об исключениях. Однако тип исключения не изменится.
  • Могут иначе обрабатываться некоторые особые ситуации, например, если для завершения операции недостаточно памяти.
  • Существуют известные различия в анализе заголовка gzip (примечание: это затрагивает только набор GZipStream для распаковки):
  • При анализе недопустимых заголовков исключения могут возникать в разное время.
  • Собственная реализация требует установку значений для некоторых зарезервированных флагов в заголовке gzip (т. е. FLG) в соответствии со спецификацией, что может приводить к исключению там, где ранее недопустимые значения игнорировались.

Предложение

Если распаковка с собственными API-интерфейсами отрицательно повлияла на поведение приложения, этот компонент можно отключить, добавив переключатель Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression в раздел runtime файла app.config и установив для него значение true:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
  </runtime>
</configuration>
Имя. Значение
Область Незначительный
Версия 4.7.2
Тип Изменение целевой платформы

Затронутые API

Гарантия использования System.Uri согласованного набора зарезервированных символов

Сведения

В System.Uri некоторые символы, закодированные процентами, которые иногда декодировались, теперь всегда остаются закодированными. Это справедливо для свойств и методов, которые получают доступ к компонентам пути, запроса, фрагмента или сведений пользователя URI. Это поведение изменится, только если выполняются оба указанные ниже условия:

  • URI содержит кодированную форму любого из следующих зарезервированных символов: :, ', (, ), ! или *.
  • URI содержит строку в кодировке Юникоде или закодированные незарезервированные символы. Если выполняются оба приведенных выше условия, закодированные зарезервированные символы остаются закодированными. В предыдущих версиях .NET Framework они декодировались.

Предложение

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

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>

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

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Имя. Значение
Область Незначительный
Версия 4.7.2
Тип Изменение целевой платформы

Затронутые API

Resgen не загружает содержимое из Интернета

Сведения

Файлы RESX могут содержать входные данные в двоичном формате. При попытке использовать Resgen для загрузки файла, скачанного из ненадежного расположения, входные данные по умолчанию не загружаются.

Предложение

Пользователи Resgen, требующие загрузки двоичных форматированных входных данных из ненадежных расположений, могут либо удалить метку веб-сайта из входного файла, либо применить запрос на отказ. Добавьте следующий параметр реестра, чтобы применить широкий выбор компьютера: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"

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

Трассировки стека, полученные при использовании переносимых PDB-файлов, теперь включают сведения об исходном файле и строке по запросу

Сведения

Начиная с .NET Framework 4.7.2 трассировки стека, полученные при использовании переносимых PDB-файлов, включают сведения об исходном файле и строке по запросу. В версиях до .NET Framework 4.7.2 сведения об исходном файле и строке были недоступны при использовании переносимых PDB-файлов, даже по явному запросу.

Предложение

Для приложений, предназначенных для .NET Framework 4.7.2, можно отказаться от вывода сведений об исходном файле и строке при использовании переносимых PDB-файлов, если это нежелательно, добавив следующую строку в раздел <runtime> файла app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>

Для приложений, которые предназначены для более ранних версий .NET Framework, но выполняются в .NET Framework 4.7.2 или более поздней версии, можно включить вывод сведений об исходном файле и строке при использовании переносимых PDB-файлов, добавив следующую строку в раздел <runtime> файла app.config:

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

Затронутые API

Windows Forms

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

Сведения

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

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

Предложение

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

  • Выполнить повторную компиляцию, чтобы нацелить приложение на .NET Framework 4.7.2. Эти специальные возможности включены по умолчанию для приложений Windows Forms, предназначенных для .NET Framework 4.7.2 или более поздней версии.
  • Оно нацелено на .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;Switch.UseLegacyAccessibilityFeatures.2=false" />
  </runtime>
</configuration>

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

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

  • Для кнопки со стрелкой раскрывающегося меню ToolStripDropDownButton теперь используются определенные операционной системой цвета в теме высокой контрастности.
  • Элементы управления Button, RadioButton и CheckBox, для которых свойству FlatStyle присвоено значение FlatStyle.Flat или FlatStyle.Popup, теперь используют определенные в ОС цвета при выборе темы высокой контрастности. Ранее цвета текста и фона не были контрастными, что ухудшало разборчивость.
  • Для элементов управления, содержащихся в GroupBox, для свойства Enabled которого задано значение false, теперь используются определенные в ОС цвета в теме высокой контрастности.
  • Элементы управления ToolStripButton, ToolStripComboBox и ToolStripDropDownButton имеют повышенное значение контрастности яркости в режиме высокой контрастности.
  • DataGridViewLinkCell по умолчанию будет использовать определяемые операционной системой цвета в режиме высокой контрастности для свойства DataGridViewLinkCell.LinkColor. ПРИМЕЧАНИЕ. В Windows 10 изменены значения некоторых системных цветов для тем высокой контрастности. Платформа Windows Forms Framework построена на основе Win32. Для достижения наилучших результатов используйте самую последнюю версию Windows и согласитесь на последние изменения операционной системы, добавив файл app.manifest в тестовое приложение и раскомментировав следующий код:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

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

  • Экранный диктор теперь сообщает значение свойства ToolStripMenuItem.ShortcutKeys при объявлении текста ToolStripMenuItem.
  • Экранный диктор теперь указывает, когда для свойства Enabled элемента ToolStripMenuItem задано значение false.
  • Экранный диктор теперь предоставляет отзыв о состоянии флажка, если для свойства ListView.CheckBoxes задано значение true.
  • Порядок фокуса экранного диктора теперь согласуется с визуальным порядком элементов управления в диалоговом окне загрузки ClickOnce.

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

  • Строки в DataGridView теперь могут быть отсортированы с помощью клавиатуры. Теперь пользователь может использовать клавишу F3, чтобы выполнить сортировку по текущему столбцу.
  • Когда DataGridView.SelectionMode имеет значение DataGridViewSelectionMode.FullRowSelect, заголовок столбца меняет цвет для указания на текущий столбец, когда пользователь переходит по ячейкам в текущей строке.
  • Свойство DataGridViewCell.DataGridViewCellAccessibleObject.Parent теперь возвращает правильный родительский элемент управления.

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

  • Элементы управления RadioButton и CheckBox с пустым свойством Text будут отображать индикатор фокуса при получении фокуса.

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

  • Дочерние PropertyGrid элементы элемента элемента управления теперь возвращают true свойство IsReadOnlyProperty только в том случае, если включен элемент PropertyGrid.

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

    Улучшение навигации с помощью клавиатуры

  • ToolStripButton теперь позволяет отображать фокус, если он содержится в ToolStripPanel, для свойства TabStop которого задано значение true.

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

Свойство ContextMenuStrip.SourceControl содержит допустимый элемент управления при наличии вложенных объектов ToolStripMenuItem

Сведения

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

Предложение

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

  • Приложение предназначено для платформы .NET Framework 4.7.2. Это изменение включено по умолчанию для приложений Windows Forms, нацеленных на .NET Framework 4.7.2 или более поздней версии.
  • Оно нацелено на .NET Framework 4.7.1 и более ранние версии платформы и позволяет отказаться от функций специальных возможностей предыдущих версий путем добавления переключателя AppContext в раздел <runtime> файла конфигурации приложения и получения значения false, как показано в следующем примере.
<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>

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

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

Затронутые API

Метод PrivateFontCollection.AddFontFile освобождает ресурсы шрифтов

Сведения

В .NET Framework 4.7.1 и предыдущих версиях класс System.Drawing.Text.PrivateFontCollection не освобождает ресурсы шрифтов GDI + после того, как PrivateFontCollection удаляется для объектов Font, добавляемых в эту коллекцию с помощью метода AddFontFile(String). В платформе .NET Framework 4.7.2 и более поздних версиях класс Dispose освобождает шрифты GDI+, которые были добавлены в коллекцию как файлы.

Предложение

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

  • Выполнить повторную компиляцию, чтобы нацелить приложение на .NET Framework 4.7.2. Это изменение включено по умолчанию для приложений Windows Forms, нацеленных на .NET Framework 4.7.2 или более поздней версии.
  • Оно нацелено на .NET Framework 4.7.1 и более ранние версии платформы и позволяет отказаться от функций специальных возможностей предыдущих версий путем добавления переключателя AppContext в раздел <runtime> файла конфигурации приложения и получения значения false, как показано в следующем примере.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>

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

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

Затронутые API

Действия upbutton и downbutton домена WinForm теперь синхронизированы

Сведения

В .NET Framework 4.7.1 и предыдущих версиях действие DomainUpDown.UpButton() элемента управления DomainUpDown игнорируется, если присутствует текст элемента управления, и разработчику приходится использовать действие DomainUpDown.DownButton() для элемента управления перед использованием действия DomainUpDown.UpButton(). Начиная с .NET Framework 4.7.2 оба действия, DomainUpDown.UpButton() и DomainUpDown.DownButton(), работают независимо друг от друга в этом сценарии и остаются синхронизированными.

Предложение

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

  • Выполнить повторную компиляцию, чтобы нацелить приложение на .NET Framework 4.7.2. Это изменение включено по умолчанию для приложений Windows Forms, нацеленных на .NET Framework 4.7.2 или более поздней версии.
  • Для отказа от функций прокрутки предыдущих версий переключатель AppContext добавляется в раздел <runtime> файла конфигурации приложения и получает значение false, как показано в следующем примере.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Имя. Значение
Область Microsoft Edge
Версия 4.7.2
Тип Изменение целевой платформы

Затронутые API

Windows Presentation Foundation (WPF)

Фокус клавиатуры теперь правильно перемещается на нескольких слоях размещения WinForms и WPF

Сведения

Рассмотрим приложение WPF для размещения элемента управления WinForms, который, в свою очередь, содержит элементы управления WPF. Пользователи не могут перейти из слоя WinForms, если первый или последний элемент управления в этом слое является System.Windows.Forms.Integration.ElementHost WPF. Это изменение устраняет эту проблему: теперь пользователи могут выйти из слоя WinForms. Автоматические приложения, зависящие от фокуса, который никогда не должен выходить из слоя WinForms, могут перестать работать должным образом.

Предложение

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

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false"/>
</runtime>
</configuration>

Для приложений WPF необходимо включить использование всех более ранних усовершенствований специальных возможностей для получения более поздних усовершенствований. Другими словами, оба переключателя, Switch.UseLegacyAccessibilityFeatures и Switch.UseLegacyAccessibilityFeatures.2, должны быть заданы. Разработчики, которым требуются прежние функции при нацеливании на .NET 4.7.2 и более поздних версий, могут установить для следующего флага AppContext значение true, чтобы отключить изменение.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Имя. Значение
Область Microsoft Edge
Версия 4.7.2
Тип Изменение целевой платформы

Алгоритмом хэширования для компилятора разметки WPF по умолчанию теперь является SHA256

Сведения

Компилятор разметки (MarkupCompiler) WPF предоставляет службы компиляции для файлов разметки XAML. В .NET Framework 4.7.1 и более ранних версиях для вычисления значений контрольной суммы по умолчанию использовался хэш-алгоритм SHA1. С учетом выявленных проблем с безопасностью SHA1, начиная с версии .NET Framework 4.7.2, теперь по умолчанию используется алгоритм SHA256. Это изменение затрагивает все поколения контрольной суммы для файлов разметки во время компиляции.

Предложение

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

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=true"/>
</runtime>
</configuration>

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

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
Имя. Значение
Область Прозрачный режим
Версия 4.7.2
Тип Изменение целевой платформы

При обработке завершения работы домена приложения в WPF теперь может вызываться Dispatcher.Invoke при очистке слабых событий

Сведения

В .NET Framework 4.7.1 и более ранних версий во время завершения работы домена приложения WPF может создавать System.Windows.Threading.Dispatcher в потоке метода завершения .NET. Эта проблема была исправлена в .NET Framework 4.7.2 и последующих версиях путем реализации поддержки потоков при очистке слабых событий. Благодаря этому WPF может вызывать Dispatcher.Invoke для завершения процесса очистки. В некоторых приложениях это изменение в управлении временем для метода завершения может привести к возникновению исключений в процессе завершения работы домена приложения или процесса. Как правило, это происходит в приложениях, в которых перед завершением работы процесса или домена приложения не завершается корректным образом работа диспетчеров, выполняющихся в рабочих потоках. В таких приложениях следует оптимизировать управление временем существования диспетчеров.

Предложение

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

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
Имя. Значение
Область Microsoft Edge
Версия 4.7.2
Тип Изменение целевой платформы

Изменение первичного ключа в WPF при отображении данных ADO в сценарии "главный — подчиненный"

Сведения

Предположим, что у вас есть коллекция элементов типа OrderADO с реляционным именем OrderDetails, связанным с коллекцией элементов типа Detail через первичный ключ OrderID. В приложении WPF можно привязать элемент управления "Список" к подробным сведениям о конкретном заказе:

<ListBox ItemsSource="{Binding Path=OrderDetails}" >

DataContext имеет значение Order. WPF получает значение свойства OrderDetails, коллекцию D всех элементов Detail, для которых OrderID совпадает с OrderID главного элемента. Поведение изменяется при изменении первичного ключа OrderID главного элемента. ADO автоматически изменяет OrderID в каждой из затронутых записей в коллекции Details (то есть в тех, которые копируются в коллекцию D). Что же происходит с коллекцией D?

  • Старое поведение: коллекция D очищается. Главный элемент не вызывает уведомление об изменении свойства OrderDetails. Поле со списком продолжает использовать коллекцию D, которая теперь пуста.
  • Новое поведение: коллекция D не изменяется. Каждый из ее элементов вызывает уведомление об изменении свойства OrderID. Поле со списком продолжает использовать коллекцию D и отображает подробные сведения с новым значением OrderID. Чтобы реализовать новое поведение, WPF создает коллекцию D другим способом, вызывая метод ADO DataRowView.CreateChildView(DataRelation, Boolean) с аргументом followParent, который имеет значение true.

Предложение

Приложение может получит новое поведение, если указать следующий параметр AppContext.

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Windows.Data.DoNotUseFollowParentWhenBindingToADODataRelation=false"/>
  </runtime>
</configuration>

По умолчанию параметр true (старое поведение) используется для приложений, предназначенных для .NET 4.7.1 или ниже, а false (новое поведение) — для приложений, предназначенных для .NET 4.7.2 или выше.

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

FocusVisual WPF для RadioButton и CheckBox теперь отображается корректно, если эти элементы управления не включают содержимое

Сведения

В .NET Framework 4.7.1 и более ранних версий System.Windows.Controls.CheckBox и System.Windows.Controls.RadioButton WPF имеют несогласованные и (в классической теме и теме высокой контрастности) неправильные визуальные элементы фокуса. Это происходит в случаях, когда для элементов управления не задано какое-либо содержимое. Это может затруднять переход между темами и отображение визуального элемента фокуса. В .NET Framework 4.7.2 эти визуальные элементы стали более согласованными в разных темах и более видимыми в классической и контрастной темах.

Предложение

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

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true;"/>
</runtime>
</configuration>

Разработчикам, желающим использовать это изменение при работе с целевой платформой версии ниже .NET Framework 4.7.2, необходимо установить следующие флаги AppContext. Обратите внимание, что все флаги должны быть заданы соответствующим образом, а установленная версия платформы .NET Framework должна быть не ниже 4.7.2. Для получения последних улучшений в приложениях WPF необходимо выбрать включение всех улучшений специальных возможностей более ранних версий. Для этого убедитесь, что оба переключателя AppContext, Switch.UseLegacyAccessibilityFeatures и Switch.UseLegacyAccessibilityFeatures.2, имеют значение false.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
Имя. Значение
Область Microsoft Edge
Версия 4.7.2
Тип Изменение целевой платформы

Выделенный текст в текстовом поле или поле пароля WPF не соответствуют системным цветам

Сведения

В .NET Framework 4.7.1 и более ранних версий System.Windows.Controls.TextBox и System.Windows.Controls.PasswordBox WPF могли отображать выделенный текст только в слое декоративных элементов. В некоторых системных темах это приводило к скрытию текста, что делало его трудно читаемым. В .NET Framework 4.7.2 и более поздних версий разработчики имеют возможность включить механизм отрисовки выбранных участков не на основе декоративных элементов, что устраняет эту проблему.

Предложение

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

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Имя. Значение
Область Microsoft Edge
Версия 4.7.2
Тип Изменение целевой платформы

Windows Workflow Foundation (WF)

Предотвращение бесконечной рекурсии для IWorkflowInstanceManagement.TransactedCancel и IWorkflowInstanceManagement.TransactedTerminate

Сведения

В некоторых случаях при использовании API IWorkflowInstanceManagement.TransactedCancel или IWorkflowInstanceManagement.TransactedTerminate для отмены или завершения экземпляра службы рабочего процесса в экземпляре рабочего процесса могло возникать переполнение стека из-за бесконечной рекурсии, когда среда выполнения Workflow пыталась сохранить экземпляр службы в ходе обработки запроса. Проблема возникает, если экземпляр рабочего процесса находится в состоянии, когда он ожидает завершения некоторых других необработанных запросов WCF к другой службе. Операции TransactedCancel и TransactedTerminate создают рабочие элементы, которые помещаются в очередь для экземпляра службы рабочего процесса. Эти рабочие элементы не выполняются в рамках обработки запроса TransactedCancel/TransactedTerminate. Поскольку экземпляр службы рабочего процесса занят ожиданием завершения другого необработанного запроса WCF, созданный рабочий элемент остается в очереди. Операция TransactedCancel/TransactedTerminate завершается, и управление возвращается клиенту. Если транзакция, связанная с операцией TransactedCancel/TransactedTerminate, пытается выполнить фиксацию, ей требуется сохранить состояние экземпляра службы рабочего процесса. Однако из-за наличия незавершенного запроса WCF для экземпляра среда выполнения рабочего процесса не может сохранить экземпляр службы рабочего процесса, и бесконечный цикл рекурсии приводит к переполнению стека. Поскольку TransactedCancel и TransactedTerminate создают рабочий элемент только в памяти, тот факт, что транзакция существует, не оказывает никакого влияния. Откат транзакции не приводит к отмене рабочего элемента. Чтобы устранить эту проблему, начиная с .NET Framework 4.7.2 мы представили AppSetting, который можно добавлять в web.config/app.config службы рабочего процесса, чтобы указать на необходимость пропуска транзакций для TransactedCancel и TransactedTerminate. Это обеспечивает фиксацию транзакции без ожидания сохранения экземпляра рабочего процесса. Параметр AppSetting для этой возможности называется microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate. Значение true указывает, что транзакцию следует игнорировать, что позволяет избежать переполнения стека. Значение по умолчанию этого AppSetting — false, поэтому существующие экземпляры службы рабочих процессов не затрагиваются.

Предложение

При использовании AppFabric или другого клиента IWorkflowInstanceManagement и возникновении переполнения стека в экземпляре службы рабочего процесса при попытке отменить или завершить экземпляр рабочего процесса можно добавить следующий код в раздел <appSettings> файла web.config/app.config для службы рабочего процесса:

<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>

Если проблема не возникает, этого делать не нужно.

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