Бөлісу құралы:


Новые возможности .NET Framework

Заметка

.NET Framework обслуживается независимо от Windows обновлений с исправлениями ошибок безопасности и надежности. Как правило, обновления системы безопасности выпускаются ежеквартально. .NET Framework будет по-прежнему включаться в Windows без планов его удаления. Вам не нужно перенести приложения .NET Framework, но для новой разработки используйте .NET вместо .NET Framework.

В этой статье приведены основные новые функции и улучшения в следующих версиях .NET Framework:

Эта статья не предоставляет исчерпывающую информацию о каждой новой функции и подлежит изменению. Общие сведения о .NET Framework см. в разделе Getting Started. См. поддерживаемые платформы в разделе системные требования. Ссылки на скачивание и инструкции по установке см. в руководстве по установке.

Заметка

Команда .NET Framework также выпускает функции вне очереди, используя NuGet, для расширения поддержки платформ и внедрения новых возможностей, таких как неизменяемые коллекции и типы векторов с поддержкой SIMD. Дополнительные сведения см. в разделе Дополнительные классы библиотек и API и .NET Framework и внеочередные выпуски. Смотрите полный список пакетов NuGet для .NET Framework.

Знакомство с .NET Framework 4.8.1

.NET Framework 4.8.1 строится на предыдущих версиях .NET Framework 4.x, добавив множество новых исправлений и несколько новых функций, оставаясь очень стабильным продуктом.

Скачивание и установка .NET Framework 4.8.1

Вы можете скачать .NET Framework 4.8.1 из следующих расположений:

.NET Framework 4.8 можно установить на Windows 11, Windows 10 версии 21H2, Windows 10 версии 21H1, Windows 10 версии 20H2 и соответствующие серверные платформы, начиная с Windows Server 2022. Вы можете установить .NET Framework 4.8.1 с помощью веб-установщика или автономного установщика. Рекомендуемый способ для большинства пользователей — использовать веб-установщик.

Вы можете нацелиться на платформу .NET Framework 4.8.1 в Visual Studio 2022 версии 17.3 или более поздней, установив пакет разработчика .NET Framework 4.8.1.

Новые возможности .NET Framework 4.8.1

.NET Framework 4.8.1 предоставляет новые возможности в следующих областях:

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

.NET Framework 4.8.1 добавляет встроенную поддержку Arm64 в семейство .NET Framework. Таким образом, ваши инвестиции в обширную экосистему приложений и библиотек .NET Framework теперь могут использовать преимущества выполнения рабочих нагрузок в arm64, а именно более высокую производительность по сравнению с выполнением кода x64, эмулированного на Arm64.

Корпорация Майкрософт имеет обязательство предоставлять продукты и платформы, которые доступны всем. .NET Framework 4.8.1 предлагает две платформы разработки пользовательского интерфейса Windows, обе из которых предоставляют разработчикам поддержку, необходимую для создания доступных приложений. За последние несколько выпусков в Windows Forms и WPF были добавлены новые функции и исправлены многочисленные проблемы с надежностью, связанные с доступностью. Дополнительные сведения о том, что было исправлено или добавлено в каждом релизе, можно прочитать на странице Что нового в области доступности .NET Framework.

В этом выпуске Windows Forms и WPF улучшили обработку подсказок, чтобы сделать их более доступными. В обоих случаях подсказки теперь соответствуют рекомендациям, приведенным в руководстве по WCAG2.1 на сайте Hover или Focus. Ниже приведены требования к подсказкам.

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

В Windows Forms эта поддержка доступна только в Windows 11 или более поздних операционных системах. Windows Forms — это тонкая управляемая оболочка вокруг API Windows, а новое поведение подсказки стало доступно только в Windows 11. WPF не имеет зависимостей версий операционных систем для доступных подсказок.

WPF реализовали большинство требований к подсказкам, соответствующим WCAG2.1, в .NET Framework 4.8. В этом выпуске WPF улучшили пользовательский опыт, гарантируя, что подсказку в текущем окне можно легко закрыть, используя клавишу Esc, клавишу Ctrl (самостоятельно) или сочетание клавиш Ctrl+Shift+F10. Область применения клавиши Esc была сокращена в этом выпуске, чтобы применяться только к текущему окну. Ранее он применялся к любой открытой подсказке в приложении.

Windows Forms был первым стеком пользовательского интерфейса Windows, созданным для .NET Framework. Таким образом, изначально она была создана для использования устаревшей технологии специальных возможностей, которая не соответствует текущим требованиям к специальным возможностям. В этом выпуске Windows Forms рассмотрел ряд проблем. Полный список изменений, связанных с специальными возможностями, смотрите в разделе Что нового в специальных возможностях в .NET Framework.

Основные сведения об улучшениях Windows Forms в .NET Framework 4.8.1:

  • Поддержка шаблона текстаText– Windows Forms добавила поддержку шаблона текста UIA. Этот шаблон позволяет вспомогательным технологиям перемещаться по содержимому текстового поля или аналогичного текстового элемента управления по буквам. Он позволяет выбрать текст в элементе управления и изменить его, а новый текст вставить на курсоре. Поддержка была добавлена в Windows Forms для TextBox, ячеек DataGridView, элементов управления ComboBox и т. д.

  • Решение проблем с контрастностью – В нескольких элементах управления Windows Forms изменен коэффициент контрастности прямоугольников выделения, чтобы они стали темнее и более заметными.

  • Исправлено несколько проблем DataGridView:

    • Имена полос прокрутки были обновлены, чтобы быть согласованными.
    • Экранный диктор теперь может сосредоточиться на пустых ячейках DataGridView.
    • Разработчики могут задать свойство локализованного типа элемента управления для ячеек Custom DataGridView.
    • Цвет ссылки для ячеек DataGridViewLink был обновлен, чтобы лучше контрастировать с фоном.

Знакомство с .NET Framework 4.8

.NET Framework 4.8 строится на предыдущих версиях .NET Framework 4.x, добавив множество новых исправлений и несколько новых функций, оставаясь очень стабильным продуктом.

Скачивание и установка .NET Framework 4.8

Вы можете скачать .NET Framework 4.8 из следующих расположений:

.NET Framework 4.8 можно установить на Windows 10, Windows 8.1, Windows 7 с пакетом обновления 1 (SP1) и соответствующие серверные платформы, начиная с Windows Server 2008 R2 с пакетом обновления 1 (SP1). Вы можете установить .NET Framework 4.8 с помощью веб-установщика или автономного установщика. Рекомендуемый способ для большинства пользователей — использовать веб-установщик.

Вы можете использовать платформу .NET Framework 4.8 в Visual Studio 2012 или более поздней версии, установив пакет разработчика .NET Framework 4.8.

Новые возможности .NET Framework 4.8

.NET Framework 4.8 предоставляет новые возможности в следующих областях:

Улучшенная доступность, которая позволяет приложению предоставлять соответствующий интерфейс для пользователей вспомогательных технологий, по-прежнему основное внимание уделяется .NET Framework 4.8. Дополнительные сведения об улучшениях доступности в .NET Framework 4.8 см. в статье Новые возможности доступности в .NET Framework.

Базовые классы

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

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

Вместо этого эти классы перенаправляют криптографические операции в системную библиотеку шифрования. Это изменение эффективно устраняет потенциально запутанную разницу между средами разработчика и рабочими средами и делает собственные компоненты и управляемые компоненты работают в той же политике шифрования. Приложения, зависящие от этих исключений, могут восстановить предыдущее поведение, задав для параметра AppContext значение Switch.System.Security.Cryptography.UseLegacyFipsThrowtrue. Дополнительные сведения см. в разделе . Классы управляемой криптографии не выдают исключение CryptographyException в режиме FIPS.

Использование обновленной версии ZLib

Начиная с .NET Framework 4.5 сборка clrcompression.dll использует ZLib, собственную внешнюю библиотеку для сжатия данных, чтобы обеспечить реализацию алгоритма дефляции. Версия clrcompression.dll в .NET Framework 4.8 обновлена для использования ZLib версии 1.2.11, которая включает в себя несколько ключевых улучшений и исправлений.

Windows Communication Foundation (WCF)

введение в понятие ServiceHealthBehavior

Конечные точки работоспособности широко используются средствами оркестрации для управления службами на основе их состояния работоспособности. Проверки работоспособности также можно использовать в средствах мониторинга для отслеживания и предоставления уведомлений о доступности и производительности службы.

ServiceHealthBehavior — это поведение службы WCF, которое расширяет объект IServiceBehavior. При добавлении в коллекцию ServiceDescription.Behaviors поведение службы выполняет следующее:

  • Возвращает состояние службы по показателям работоспособности и кодам ответов HTTP. Можно указать в строке запроса код состояния HTTP для запроса пробы работоспособности HTTP/GET.

  • Публикует сведения о работоспособности служб. Сведения о конкретной службе, включая состояние службы, счетчики регулирования и емкость, можно отобразить с помощью HTTP/GET-запроса с строкой запроса ?health. Удобство доступа к такой информации важно при устранении неполадок, связанных со службой WCF.

Существует два способа обеспечения доступа к конечной точке работоспособности и публикации сведений о состоянии службы WCF:

  • С помощью кода. Например:

    ServiceHost host = new ServiceHost(typeof(Service1),
                       new Uri("http://contoso:81/Service1"));
    ServiceHealthBehavior healthBehavior =
        host.Description.Behaviors.Find<ServiceHealthBehavior>();
    healthBehavior ??= new ServiceHealthBehavior();
    host.Description.Behaviors.Add(healthBehavior);
    
    Dim host As New ServiceHost(GetType(Service1),
                New Uri("http://contoso:81/Service1"))
    Dim healthBehavior As ServiceHealthBehavior =
       host.Description.Behaviors.Find(Of ServiceHealthBehavior)()
    If healthBehavior Is Nothing Then
       healthBehavior = New ServiceHealthBehavior()
    End If
    host.Description.Behaviors.Add(healthBehavior)
    
  • С помощью файла конфигурации. Например:

    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceHealth httpsGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    

Состояние работоспособности службы можно запрашивать с помощью таких параметров запроса, как OnServiceFailure, OnDispatcherFailure, OnListenerFailureOnThrottlePercentExceededи код ответа HTTP можно указать для каждого параметра запроса. Если код ответа HTTP опущен для параметра запроса, по умолчанию используется код ответа HTTP 503. Например:

  • При сбое сервиса: https://contoso:81/Service1?health&OnServiceFailure=450

    Код состояния ответа HTTP 450 возвращается, если ServiceHost.State больше CommunicationState.Opened.

Параметры запроса и примеры:

  • OnDispatcherFailure: https://contoso:81/Service1?health&OnDispatcherFailure=455

    Код состояния ответа HTTP 455 возвращается, когда состояние любого из диспетчеров каналов больше CommunicationState.Opened.

  • OnListenerFailure: https://contoso:81/Service1?health&OnListenerFailure=465

    Код состояния HTTP-ответа 465 возвращается, когда состояние любого из слушателей канала превышает CommunicationState.Opened.

  • При превышении процента дросселя: https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500

    Задает процент {1 – 100}, который активирует ответ и код HTTP-ответа {200 – 599}. В этом примере:

    • Если процент больше 95, возвращается код ответа HTTP 500.

    • Если процент составляет от 70 до 95, возвращается 350.

    • В противном случае возвращается значение 200.

Состояние работоспособности службы можно отобразить в HTML, указав строку запроса, например https://contoso:81/Service1?health или в XML, указав строку запроса, например https://contoso:81/Service1?health&Xml. Строка запроса, например https://contoso:81/Service1?health&NoContent возвращает пустую HTML-страницу.

Windows Presentation Foundation (WPF)

Улучшения для высокого разрешения DPI

В .NET Framework 4.8 WPF добавляет поддержку учета DPI Per-Monitor V2 и масштабирования DPI в смешанном режиме. Дополнительные сведения о разработке настольных приложений с высоким разрешением DPI см. в разделе Высокое разрешение DPI в приложениях для Windows.

.NET Framework 4.8 улучшает поддержку размещенных HWND и взаимодействие Windows Forms с приложениями High-DPI WPF на платформах, поддерживающих масштабирование DPI смешанного режима (начиная с обновления Windows 10 от апреля 2018 года). Если размещенные элементы управления HWND или Windows Forms создаются как окна с масштабированием DPI в смешанном режиме, вызывая SetThreadDpiHostingBehavior и SetThreadDpiAwarenessContext, они могут размещаться в приложении Per-Monitor V2 WPF и корректно масштабируются. Такое размещенное содержимое не отображается в собственном DPI; Вместо этого операционная система масштабирует размещенное содержимое до соответствующего размера. Поддержка режима осведомленности Per-Monitor версии 2 DPI также позволяет размещать элементы управления WPF (то есть родительские) в собственном окне в приложении с высоким уровнем DPI.

Чтобы включить поддержку масштабирования Mixed-Mode High DPI, можно задать следующие AppContext переключатели в файле конфигурации приложения.

<runtime>
   <AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false; Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false"/>
</runtime>

Общая языковая среда выполнения

Среда выполнения в .NET Framework 4.8 включает следующие изменения и улучшения:

Улучшения для компилятора JIT. Компилятор JIT в .NET Framework 4.8 основан на компиляторе JIT в .NET Core 2.1. Многие из оптимизаций и всех исправлений ошибок, внесенных в компилятор JIT .NET Core 2.1, включены в компилятор JIT .NET Framework 4.8.

улучшения в NGEN. Среда выполнения улучшила управление памятью для образов машинного генератора образов (NGEN), чтобы данные, сопоставленные с образами NGEN, не были резидентами памяти. Это сокращает поверхность атаки, доступную для тех атак, которые пытаются выполнить произвольный код, изменяя память, предназначенную для выполнения.

Антивирусное сканирование для всех сборок. В предыдущих версиях .NET Framework среда выполнения сканирует все сборки, загруженные с диска, с помощью Windows Defender или стороннего антивредоносного программного обеспечения. Однако сборки, загруженные из других источников, например с помощью Assembly.Load(Byte[]) метода, не сканируются и могут потенциально содержать незамеченные вредоносные программы. Начиная с .NET Framework 4.8, работающей на Windows 10, среда выполнения активирует сканирование по решениям защиты от вредоносных программ, реализующим интерфейс проверки Antimalware Scan Interface (AMSI).

Новые возможности .NET Framework 4.7.2

.NET Framework 4.7.2 включает новые функции в следующих областях:

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

Базовые классы

.NET Framework 4.7.2 имеет большое количество усовершенствований шифрования, более эффективную поддержку распаковки для ZIP-архивов и дополнительных API коллекции.

Новые перегрузки RSA.Create и DSA.Create

Методы DSA.Create(DSAParameters) и RSA.Create(RSAParameters) позволяют задавать ключевые параметры при создании нового ключа DSA или RSA. Они позволяют заменить код следующим образом:

// Before .NET Framework 4.7.2
using (RSA rsa = RSA.Create())
{
   rsa.ImportParameters(rsaParameters);
   // Other code to execute using the RSA instance.
}
' Before .NET Framework 4.7.2
Using rsa = RSA.Create()
   rsa.ImportParameters(rsaParameters)
   ' Other code to execute using the rsa instance.
End Using

с кодом, подобным этому:

// Starting with .NET Framework 4.7.2
using (RSA rsa = RSA.Create(rsaParameters))
{
   // Other code to execute using the rsa instance.
}
' Starting with .NET Framework 4.7.2
Using rsa = RSA.Create(rsaParameters)
   ' Other code to execute using the rsa instance.
End Using

Методы DSA.Create(Int32) и RSA.Create(Int32) позволяют генерировать новые DSA или RSA ключи с установленным размером ключа. Например:

using (DSA dsa = DSA.Create(2048))
{
   // Other code to execute using the dsa instance.
}
Using dsa = DSA.Create(2048)
   ' Other code to execute using the dsa instance.
End Using

Конструкторы Rfc2898DeriveBytes поддерживают ввод имени хэш-алгоритма

Класс Rfc2898DeriveBytes содержит три новых конструктора с параметром HashAlgorithmName , определяющим алгоритм HMAC, используемый при производных ключах. Вместо использования SHA-1 разработчики должны использовать HMAC на основе SHA-2, например SHA-256, как показано в следующем примере:

private static byte[] DeriveKey(string password, out int iterations, out byte[] salt,
                                out HashAlgorithmName algorithm)
{
   iterations = 100000;
   algorithm = HashAlgorithmName.SHA256;

   const int SaltSize = 32;
   const int DerivedValueSize = 32;

   using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, SaltSize,
                                                             iterations, algorithm))
   {
      salt = pbkdf2.Salt;
      return pbkdf2.GetBytes(DerivedValueSize);
   }
}
Private Shared Function DeriveKey(password As String, ByRef iterations As Integer,
                                  ByRef salt AS Byte(), ByRef algorithm As HashAlgorithmName) As Byte()
   iterations = 100000
   algorithm = HashAlgorithmName.SHA256

   Const SaltSize As Integer = 32
   Const  DerivedValueSize As Integer = 32

   Using pbkdf2 = New Rfc2898DeriveBytes(password, SaltSize, iterations, algorithm)
      salt = pbkdf2.Salt
      Return pbkdf2.GetBytes(DerivedValueSize)
   End Using
End Function

поддержка временных ключей

Импорт PFX может при необходимости загружать закрытые ключи непосредственно из памяти, обходя жесткий диск. Если новый флаг X509KeyStorageFlags.EphemeralKeySet указан в конструкторе X509Certificate2 или одной из перегрузок метода X509Certificate2.Import, закрытые ключи будут загружены в виде эфемерных ключей. Это предотвращает отображение ключей на диске. Однако:

  • Так как ключи не сохраняются на диске, сертификаты, загруженные этим флагом, не являются хорошими кандидатами для добавления в X509Store.

  • Ключи, загруженные таким образом, почти всегда загружаются через Windows CNG. Таким образом, вызывающие должны получить доступ к закрытому ключу путем вызова методов расширения, таких как сертификат. GetRSAPrivateKey(). Свойство X509Certificate2.PrivateKey не работает.

  • Так как устаревшее X509Certificate2.PrivateKey свойство не работает с сертификатами, разработчики должны выполнять строгое тестирование, прежде чем переходить на временные ключи.

Программное создание запросов на подписывание сертификатов PKCS#10 и сертификатов открытого ключа X.509

Начиная с .NET Framework 4.7.2 рабочие нагрузки могут создавать запросы на подписывание сертификатов (CSR), что позволяет создавать запросы на получение сертификатов в существующие средства. Это часто полезно в сценариях тестирования.

Дополнительные сведения и примеры кода см. в статье "Программное создание запросов на подписывание сертификатов PKCS#10 и сертификатов открытого ключа X.509" в блоге .NET.

Новые члены SignerInfo

Начиная с .NET Framework 4.7.2 класс SignerInfo предоставляет дополнительные сведения о подписи. Значение свойства можно получить, чтобы определить алгоритм подписи System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm , используемый подписчиком. SignerInfo.GetSignature можно вызвать, чтобы получить копию криптографической подписи для этого подписанта.

Оставление упакованного потока открытым после закрытия CryptoStream

Начиная с .NET Framework 4.7.2, класс CryptoStream имеет дополнительный конструктор, позволяющий Dispose не закрывать упакованный поток. Чтобы оставить завернутый поток открытым после CryptoStream удаления экземпляра, вызовите новый CryptoStream конструктор следующим образом:

var cStream = new CryptoStream(stream, transform, mode, leaveOpen: true);
Dim cStream = New CryptoStream(stream, transform, mode, leaveOpen:=true)

Изменения декомпрессии в DeflateStream

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

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

<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=false" />

Дополнительные API для работы с коллекциями

.NET Framework 4.7.2 добавляет ряд новых API в типы SortedSet<T> и HashSet<T>. К ним относятся:

Класс ConcurrentDictionary<TKey,TValue> включает новые перегрузки для методов AddOrUpdate и GetOrAdd, с помощью которых можно извлечь значение из словаря или добавить его, если оно не найдено, а также добавить значение в словарь или обновить его, если оно уже существует.

public TValue AddOrUpdate<TArg>(TKey key, Func<TKey, TArg, TValue> addValueFactory, Func<TKey, TValue, TArg, TValue> updateValueFactory, TArg factoryArgument)

public TValue GetOrAdd<TArg>(TKey key, Func<TKey, TArg, TValue> valueFactory, TArg factoryArgument)
Public AddOrUpdate(Of TArg)(key As TKey, addValueFactory As Func(Of TKey, TArg, TValue), updateValueFactory As Func(Of TKey, TValue, TArg, TValue), factoryArgument As TArg) As TValue

Public GetOrAdd(Of TArg)(key As TKey, valueFactory As Func(Of TKey, TArg, TValue), factoryArgument As TArg) As TValue

ASP.NET

Поддержка внедрения зависимостей в веб-формах

Внедрение зависимостей (DI) отделяет объекты и их зависимости, так что код объекта больше не требует изменений из-за того что изменилась зависимость. При разработке ASP.NET приложений, предназначенных для платформы .NET Framework 4.7.2, можно:

Поддержка файлов cookie того же сайта

SameSite запрещает браузеру отправлять файлы cookie вместе с запросом на межсайтовый сайт. .NET Framework 4.7.2 добавляет свойство HttpCookie.SameSite, значение которого является членом перечисления System.Web.SameSiteMode. Если его значение равно SameSiteMode.Strict или SameSiteMode.Lax, ASP.NET добавляет атрибут SameSite в заголовок set-cookie. Поддержка SameSite применяется к HttpCookie объектам, а также к FormsAuthentication файлам cookie и System.Web.SessionState файлам cookie.

Вы можете задать SameSite HttpCookie для объекта следующим образом:

var c = new HttpCookie("secureCookie", "same origin");
c.SameSite = SameSiteMode.Lax;
Dim c As New HttpCookie("secureCookie", "same origin")
c.SameSite = SameSiteMode.Lax

Вы также можете настроить файлы cookie SameSite на уровне приложения, изменив файл web.config:

<system.web>
   <httpCookies sameSite="Strict" />
</system.web>

Вы можете добавить SameSite for FormsAuthentication и System.Web.SessionState cookie, изменив файл конфигурации веб-сайта:

<system.web>
   <authentication mode="Forms">
      <forms cookieSameSite="Lax">
         <!-- ...   -->
      </forms>
   </authentication>
   <sessionState cookieSameSite="Lax"></sessionState>
</system.web>

Сетевые технологии

Реализация свойств в HttpClientHandler

.NET Framework 4.7.1 добавил восемь свойств в класс System.Net.Http.HttpClientHandler. Однако двое бросили PlatformNotSupportedException. .NET Framework 4.7.2 теперь предоставляет реализацию этих свойств. Свойства:

SQLClient

Поддержка универсальной аутентификации Azure Active Directory и многофакторной аутентификации

Растущие требования к соответствию и безопасности требуют, чтобы многие клиенты использовали многофакторную проверку подлинности (MFA). Кроме того, текущие рекомендации не рекомендуют включать пароли пользователей непосредственно в строки подключения. Для поддержки этих изменений .NET Framework 4.7.2 расширяет строки подключения SQLClient, добавляя новое значение "Active Directory Interactive" для существующего ключевого слова "Аутентификация" с целью поддержки MFA и Azure AD Аутентификации. Новый интерактивный метод поддерживает коренных и федеративных пользователей Azure AD, а также гостевых пользователей Azure AD. При использовании этого метода проверка подлинности MFA, введенная Azure AD, поддерживается для баз данных SQL. Кроме того, процесс проверки подлинности запрашивает пароль пользователя для соблюдения рекомендаций по безопасности.

В предыдущих версиях .NET Framework подключение SQL поддерживает только параметры SqlAuthenticationMethod.ActiveDirectoryPassword и SqlAuthenticationMethod.ActiveDirectoryIntegrated. Оба из них являются частью неинтерактивного протокола ADAL, который не поддерживает MFA. С помощью нового параметра SqlAuthenticationMethod.ActiveDirectoryInteractive подключение SQL поддерживает MFA, а также существующие методы проверки подлинности (пароль и встроенная проверка подлинности), что позволяет пользователям вводить пароли пользователей в интерактивном режиме без сохранения паролей в connection string.

Дополнительные сведения и пример см. в статье "SQL - Azure поддержка универсальной и многофакторной проверки подлинности AD" в блоге .NET.

поддержка для Always Encrypted версии 2

NET Framework 4.7.2 добавляет поддержку Always Encrypted с поддержкой анклавов. Исходная версия Always Encrypted — это технология шифрования на стороне клиента, в которой ключи шифрования никогда не покидают клиента. В Always Encrypted с использованием анклавов клиент может при необходимости отправлять ключи шифрования в безопасный анклав, который является защищённой вычислительной сущностью, которую можно считать частью SQL Server, но SQL Server код не может вмешиваться в неё. Для поддержки Always Encrypted, реализованного на основе анклавов, .NET Framework 4.7.2 добавляет следующие типы и члены в пространство имен System.Data.SqlClient:

  • SqlConnectionStringBuilder.EnclaveAttestationUrl, который задает URI для Always Encrypted с использованием анклава.

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

  • SqlEnclaveSession, который инкапсулирует текущее состояние для определённого сеанса анклава.

  • SqlEnclaveAttestationParameters, который предоставляет параметры аттестации, используемые SQL Server для получения сведений, необходимых для выполнения определенного протокола аттестации.

Затем файл конфигурации приложения указывает конкретную реализацию абстрактного System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider класса, который предоставляет функциональные возможности для поставщика анклава. Например:

<configuration>
  <configSections>
    <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,System.Data,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
  </configSections>
  <SqlColumnEncryptionEnclaveProviders>
    <providers>
      <add name="Azure" type="Microsoft.SqlServer.Management.AlwaysEncrypted.AzureEnclaveProvider,MyApp"/>
      <add name="HGS" type="Microsoft.SqlServer.Management.AlwaysEncrypted.HGSEnclaveProvider,MyApp" />
    </providers>
  </SqlColumnEncryptionEnclaveProviders >
</configuration>

Базовый поток Always Encrypted на базе анклавов:

  1. Пользователь создает подключение AlwaysEncrypted к SQL Server, поддерживающий Always Encrypted, основанную на анклаве. Драйвер обращается к службе аттестации, чтобы убедиться, что он подключается к правильному анклаву.

  2. После аттестации анклава драйвер устанавливает защищенный канал с безопасным анклавом, размещённым в SQL Server.

  3. Драйвер делится ключами шифрования, авторизованными клиентом, с безопасным анклавом на время соединения SQL.

Windows Presentation Foundation

Поиск ResourceDictionaries по источнику

Начиная с .NET Framework 4.7.2, помощник по диагностике может найти ResourceDictionaries, созданные на основе заданного исходного URI. (Эта функция используется помощниками по диагностике, а не рабочими приложениями.) Помощник по диагностике, например средство Visual Studio "Изменить и продолжить", позволяет пользователю изменять ResourceDictionary с намерением применить изменения к работающему приложению. Одним из этапов достижения этого является поиск всех ResourceDictionaries, которые запущенное приложение создало из редактируемого словаря. Например, приложение может объявить ResourceDictionary, содержимое которого копируется из заданного исходного URI:

<ResourceDictionary Source="MyRD.xaml" />

Помощник по диагностике, который изменяет исходную разметку в MyRD.xaml , может использовать новую функцию для поиска словаря. Функция реализуется новым статическим методом ResourceDictionaryDiagnostics.GetResourceDictionariesForSource. Помощник диагностики вызывает новый метод с помощью абсолютного URI, который определяет исходную разметку, как показано в следующем коде:

IEnumerable<ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri("pack://application:,,,/MyApp;component/MyRD.xaml"));
Dim dictionaries As IEnumerable(Of ResourceDictionary) = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(New Uri("pack://application:,,,/MyApp;component/MyRD.xaml"))

Метод возвращает пустое перечисление, если VisualDiagnostics не включен или переменная среды ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO не задана.

поиск владельцев ResourceDictionary

Начиная с .NET Framework 4.7.2, помощник по диагностике может найти владельцев заданного ResourceDictionary. (Эта функция используется помощниками по диагностике, а не рабочими приложениями.) При каждом изменении в ResourceDictionary WPF автоматически находит все ссылки DynamicResource, которые могут повлиять на изменение.

Помощник по диагностике, например функция Visual Studio "Изменение и продолжение", может захотеть расширить это для обработки ссылок StaticResource. Первым шагом в этом процессе является поиск владельцев словаря; то есть, чтобы найти все объекты, свойство которых Resources ссылается на словарь (напрямую или косвенно через ResourceDictionary.MergedDictionaries свойство). Три новых статических метода, реализованных в классе System.Windows.Diagnostics.ResourceDictionaryDiagnostics, по одному для каждого из базовых типов с свойством Resources, поддерживают этот шаг:

Эти методы возвращают пустую перечисляемую коллекцию, если VisualDiagnostics не активирован и не задана переменная среды ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO.

Поиск ссылок StaticResource

Теперь помощник по диагностике может получать уведомление при разрешении ссылки StaticResource. (Эта функция предназначена для использования помощниками по диагностике, а не рабочими приложениями.) Помощник по диагностике, такой как средство Visual Studio "Изменить и продолжить", может захотеть обновить все случаи использования ресурса при изменении его значения в ResourceDictionary. WPF выполняет это автоматически для ссылок DynamicResource, но намеренно не делает это для ссылок StaticResource. Начиная с .NET Framework 4.7.2, помощник по диагностике может использовать эти уведомления для поиска тех, кто использует статический ресурс.

Уведомление реализуется новым ResourceDictionaryDiagnostics.StaticResourceResolved событием:

public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;
Public Shared Event StaticResourceResolved As EventHandler(Of StaticResourceResolvedEventArgs)

Это событие поднимается каждый раз, когда среда выполнения обрабатывает ссылку StaticResource. Аргументы StaticResourceResolvedEventArgs описывают разрешение и указывают объект и свойство, в котором размещена ссылка StaticResource , и ResourceDictionary ключ, используемый для разрешения:

public class StaticResourceResolvedEventArgs : EventArgs
{
   public Object TargetObject { get; }

   public Object TargetProperty { get; }

   public ResourceDictionary ResourceDictionary { get; }

   public object ResourceKey { get; }
}
Public Class StaticResourceResolvedEventArgs : Inherits EventArgs
   Public ReadOnly Property TargetObject As Object
   Public ReadOnly Property TargetProperty As Object
   Public ReadOnly Property ResourceDictionary As ResourceDictionary
   Public ReadOnly Property ResourceKey As Object
End Class

Событие не вызывается (и его метод доступа add игнорируется), если VisualDiagnostics не активирована или не задана переменная среды ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO.

ClickOnce

Приложения с поддержкой HDPI для Windows Forms, Windows Presentation Foundation (WPF) и Visual Studio Tools for Office (VSTO) можно развернуть с помощью ClickOnce. Если в манифесте приложения найдена следующая запись, развертывание будет выполнено в .NET Framework 4.7.2:

<windowsSettings>
   <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>

Для приложения Windows Forms предыдущая практика настройки конфигурации DPI в файле конфигурации приложения, а не в манифесте приложения, больше не необходима для успешного развертывания ClickOnce.

Новые возможности .NET Framework 4.7.1

.NET Framework 4.7.1 включает новые функции в следующих областях:

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

Базовые классы

Поддержка .NET Standard 2.0

.NET Standard определяет набор API, которые должны быть доступны для каждой реализации .NET, поддерживающей ту версию стандарта. .NET Framework 4.7.1 полностью поддерживает .NET standard 2.0 и добавляет about 200 API, определенные в .NET standard 2.0 и отсутствуют в .NET Framework 4.6.1, 4.6.2 и 4.7. (Обратите внимание, что эти версии платформы .NET Framework поддерживают .NET standard 2.0, только если в целевой системе также развертываются дополнительные файлы поддержки .NET standard.) Дополнительные сведения см. в статье "Поддержка BCL - .NET standard 2.0" в записи блога .NET Framework 4.7.1 Runtime and Compiler Features блоге.

поддержка для построителей конфигураций

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

Чтобы создать пользовательский построитель конфигураций, вы наследуете от абстрактного класса ConfigurationBuilder и переопределяете его ConfigurationBuilder.ProcessConfigurationSection и ConfigurationBuilder.ProcessRawXml. Вы также определяете билдеров в файле .config. Дополнительные сведения см. в разделе "Построитель конфигураций" в записи блога .NET Framework 4.7.1 ASP.NET и конфигурации.

Обнаружение функций среды выполнения

Класс System.Runtime.CompilerServices.RuntimeFeature предоставляет механизм определения того, поддерживается ли предопределенная функция в заданной реализации .NET во время компиляции или во время выполнения. Во время компиляции компилятор может проверить, существует ли указанное поле, чтобы определить, поддерживается ли функция; Если это так, он может выдавать код, который использует преимущества этой функции. Во время выполнения приложение может вызвать RuntimeFeature.IsSupported метод перед генерацией кода во время выполнения. Дополнительные сведения см. в разделе о добавлении вспомогательного метода для описания функций среды выполнения, поддерживаемых.

Кортежи значений являются сериализуемыми

Начиная с .NET Framework 4.7.1, System.ValueTuple и связанные с ним универсальные типы помечаются как Serializable, что позволяет двоичной сериализации. Это должно упростить миграцию типов кортежей, таких как Tuple<T1,T2,T3> и Tuple<T1,T2,T3,T4>, к типам значений-кортежей. Для получения дополнительной информации, см. статью "Компилятор -- ValueTuple сериализуется" в записи блога Особенности Runtime и Compiler .NET Framework 4.7.1.

поддержка ссылок только для чтения

.NET Framework 4.7.1 добавляет System.Runtime.CompilerServices.IsReadOnlyAttribute. Этот атрибут используется компиляторами языка для пометки элементов с возвращаемыми типами или параметрами только для чтения. Дополнительные сведения см. в статье "Компилятор — поддержка READONLYREFERENCES" в записи блога .NET Framework 4.7.1 Особенности среды и компилятора. Сведения о возвращаемых значениях ссылок см. в статьях возвращаемые значения ссылок, ref locals и возвращаемые значения ссылок (Visual Basic).

Общая языковая среда выполнения (CLR)

Усовершенствования в производительности сборки мусора

Изменения сборки мусора (GC) в .NET Framework 4.7.1 повышают общую производительность, особенно для выделения больших кучи объектов (LOH). В .NET Framework 4.7.1 отдельные блокировки используются для небольших кучи объектов (SOH) и распределения LOH, что позволяет выполнять выделение LOH при очистке soH фоновой сборки. В результате приложения, которые делают большое количество выделений LOH, могут наблюдать сокращение конфликтов блокировки при выделении и повышение производительности. Дополнительные сведения см. в разделе "Улучшения производительности среды выполнения — GC" в записи блога .NET Framework 4.7.1 Runtime and Compiler Features.

Сетевые технологии

поддержка SHA-2 для алгоритма хеширования сообщения (Message.HashAlgorithm)

В .NET Framework 4.7 и более ранних версиях свойство Message.HashAlgorithm поддерживает только значения HashAlgorithm.Md5 и HashAlgorithm.Sha. Начиная с .NET Framework 4.7.1, HashAlgorithm.Sha256, HashAlgorithm.Sha384 и HashAlgorithm.Sha512 также поддерживаются. Независимо от того, используется ли это значение, зависит от MSMQ, так как Message сам экземпляр не выполняет хэширование, но просто передает значения в MSMQ. Дополнительные сведения см. в разделе "Поддержка SHA-2 для Message.HashAlgorithm" в записи блога особенности .NET Framework 4.7.1 ASP.NET и конфигурации.

ASP.NET

Этапы выполнения в приложениях ASP.NET

ASP.NET обрабатывает запросы в предопределенном конвейере, включающее 23 события. ASP.NET выполняет каждый обработчик событий в качестве шага выполнения. В версиях ASP.NET до .NET Framework 4.7 ASP.NET нельзя передавать контекст выполнения из-за переключения между собственными и управляемыми потоками. Вместо этого ASP.NET выборочно передает только HttpContext. Начиная с .NET Framework 4.7.1 метод HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) также позволяет модулям восстанавливать внешние данные. Эта функция предназначена для библиотек, связанных с трассировкой, профилированием, диагностикой или транзакциями, например, которые заботятся о потоке выполнения приложения. Дополнительные сведения см. в разделе "Функция выполнения шага в ASP.NET" в публикации блога Функции ASP.NET и конфигурации в .NET Framework 4.7.1.

ASP.NET синтаксический анализ HttpCookie

.NET Framework 4.7.1 включает новый метод, HttpCookie.TryParse, который предоставляет стандартный способ создания объекта HttpCookie из строки и точного задания значений куки, таких как дата окончания срока действия и путь. Для получения более подробной информации, см. раздел "Разбор HttpCookie в ASP.NET" в записи блога .NET Framework 4.7.1: особенности ASP.NET и конфигурации.

параметры хэша SHA-2 для учетных данных аутентификации форм ASP.NET

В .NET Framework 4.7 и более ранних версиях ASP.NET позволил разработчикам хранить учетные данные пользователей с хэшированных паролей в файлах конфигурации с помощью MD5 или SHA1. Начиная с .NET Framework 4.7.1, ASP.NET также поддерживает новые безопасные хэш-параметры SHA-2, такие как SHA256, SHA384 и SHA512. SHA1 остается стандартным, и алгоритм хэша, отличный от по умолчанию, можно определить в файле веб-конфигурации.

Важный

Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Если вы подключаетесь к Azure SQL, управляемые удостоверения для ресурсов Azure являются рекомендуемым методом аутентификации.

Новые возможности .NET Framework 4.7

.NET Framework 4.7 включает новые функции в следующих областях:

См. в разделе изменений API в .NET Framework 4.7 на GitHub список новых API, добавленных в .NET Framework 4.7. Список улучшений функций и исправлений ошибок в .NET Framework 4.7 см. в разделе .NET Framework 4.7 List of Changes on GitHub. Дополнительные сведения см. в статье Announcing .NET Framework 4.7 в блоге .NET.

Базовые классы

.NET Framework 4.7 улучшает сериализацию путем DataContractJsonSerializer:

Расширенные функциональные возможности с помощью шифрования эллиптических кривых (ECC)*

В .NET Framework 4.7 методы ImportParameters(ECParameters) были добавлены в классы ECDsa и ECDiffieHellman, чтобы объект представлял уже установленный ключ. Метод ExportParameters(Boolean) также был добавлен для экспорта ключа с помощью явных параметров кривой.

.NET Framework 4.7 также добавляет поддержку дополнительных кривых (включая набор кривых Brainpool) и добавляет предопределенные определения для упрощения процесса их создания с помощью новых фабричных методов Create и Create.

На GitHub можно увидеть пример улучшений криптографии в .NET Framework 4.7.

Улучшена поддержка символов управления функцией DataContractJsonSerializer

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

Сетевые технологии

.NET Framework 4.7 добавляет следующую сетевую функцию:

Поддержка операционных систем по умолчанию для протоколов TLS*

Стек TLS, используемый System.Net.Security.SslStream и компонентами верхнего уровня, такими как HTTP, FTP и SMTP, позволяет разработчикам использовать протоколы TLS по умолчанию, поддерживаемые операционной системой. Разработчикам больше не нужен жесткий код версии TLS.

ASP.NET

В .NET Framework 4.7 ASP.NET включает следующие новые функции:

Расширяемость кэша объектов

Начиная с .NET Framework 4.7, ASP.NET добавляет новый набор API, который позволяет разработчикам заменить реализации по умолчанию ASP.NET для кэширования объектов в памяти и мониторинга памяти. Теперь разработчики могут заменить любой из следующих трех компонентов, если реализация ASP.NET не является достаточной:

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

  • мониторинг памяти. Монитор памяти по умолчанию в ASP.NET уведомляет приложения о том, что они выполняются близко к настроенному ограничению частных байтов для процесса, или когда компьютер ограничен общим объемом физической оперативной памяти. Когда эти ограничения подходят к пределам, уведомления отправляются. Для некоторых приложений уведомления запускаются слишком близко к настроенным ограничениям, чтобы обеспечить полезные реакции. Теперь разработчики могут создавать собственные мониторы памяти для замены мониторов по умолчанию с помощью свойства ApplicationMonitors.MemoryMonitor.

  • Реакции ограничения памяти. По умолчанию ASP.NET пытается обрезать кэш объектов и периодически вызывать GC.Collect, когда ограничение частного байтового процесса приближается. Для некоторых приложений частота вызовов GC.Collect или объем кэша, который обрезается, неэффективны. Разработчики теперь могут заменить или дополнить поведение по умолчанию, подписав IObserver реализации в монитор памяти приложения.

Windows Communication Foundation (WCF)

Windows Communication Foundation (WCF) добавляет следующие функции и изменения:

Возможность настройки параметров безопасности сообщений по умолчанию для TLS 1.1 или TLS 1.2

Начиная с .NET Framework 4.7 WCF позволяет настроить TLS 1.1 или TLS 1.2 в дополнение к протоколу SSL 3.0 и TLS 1.0 в качестве протокола безопасности сообщений по умолчанию. Это параметр согласия; Чтобы включить его, необходимо добавить следующую запись в файл конфигурации приложения:

<runtime>
   <AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>

Повышена надежность приложений WCF и WCF сериализации

WCF включает ряд изменений кода, которые устраняют условия гонки, тем самым повышая производительность и надежность параметров сериализации. К ним относятся:

  • Улучшена поддержка комбинирования асинхронного и синхронного кода при вызовах SocketConnection.BeginRead и SocketConnection.Read.
  • Улучшена надежность при прерывании подключения с SharedConnectionListener и DuplexChannelBinder.
  • Улучшена надежность операций сериализации при вызове FormatterServices.GetSerializableMembers(Type) метода.
  • Улучшена надежность при удалении официанта путем вызова метода ChannelSynchronizer.RemoveWaiter .

Windows Forms

В .NET Framework 4.7 Windows Forms улучшает поддержку мониторов с высоким уровнем DPI.

поддержка высокой DPI

Начиная с приложений, предназначенных для платформы .NET Framework 4.7, .NET Framework поддерживает высокий уровень DPI и динамическую поддержку DPI для приложений Windows Forms. Поддержка высокого уровня DPI улучшает макет и внешний вид форм и элементов управления на мониторах высокого уровня DPI. Динамический DPI изменяет макет и внешний вид форм и элементов управления, когда пользователь изменяет DPI или отображает коэффициент масштабирования запущенного приложения.

Поддержка высокого уровня DPI — это функция согласия, которую вы настраиваете, определив <System. Windows. Forms.ConfigurationSection> в файле конфигурации приложения. Дополнительные сведения о добавлении поддержки высокого уровня DPI и динамической поддержки DPI в приложение Windows Forms см. в разделе Поддержка DPI в Windows Forms.

Windows Presentation Foundation (WPF)

В .NET Framework 4.7 WPF включает следующие улучшения:

Поддержка сенсорного и стилусного стека, основанного на сообщениях Windows WM_POINTER

Теперь вы можете использовать стек сенсорного ввода или пера на основе сообщений WM_POINTER вместо платформы Windows служб рукописного ввода (WISP). Это функция согласия в .NET Framework. Дополнительные сведения см. в разделе совместимости приложений.

Новая реализация API печати для WPF

API печати WPF в классе System.Printing.PrintQueue вызывают API Windows Print Document Package API вместо устаревшего API печати XPS Print API. Сведения о влиянии этого изменения на совместимость приложений см. в разделе "Совместимость приложений ".

Новые возможности .NET Framework 4.6.2

.NET Framework 4.6.2 включает новые функции в следующих областях:

Список новых API, добавленных в .NET Framework 4.6.2, см. в разделе .NET Framework 4.6.2. Изменения API на GitHub. Список улучшений функций и исправлений ошибок в .NET Framework 4.6.2 см. в GitHub .NET Framework 4.6.2. Дополнительные сведения см. в разделе Announcing .NET Framework 4.6.2 в блоге .NET.

ASP.NET

В .NET Framework 4.6.2 ASP.NET включает следующие улучшения:

Улучшена поддержка локализованных сообщений об ошибках в валидаторах аннотаций данных

Валидаторы аннотаций данных позволяют вам выполнять проверку, добавляя один или несколько атрибутов в свойство класса. Элемент атрибута ValidationAttribute.ErrorMessage определяет текст сообщения об ошибке, если проверка завершается ошибкой. Начиная с .NET Framework 4.6.2, ASP.NET упрощает локализацию сообщений об ошибках. Сообщения об ошибках будут локализованы, если:

  1. В атрибуте проверки содержится ValidationAttribute.ErrorMessage.

  2. Файл ресурса хранится в папке App_LocalResources.

  3. Имя файла локализованных ресурсов имеет форму DataAnnotation.Localization.{name}.resx, где имя — это имя языка и региональных параметров в формате languageCode-country/regionCode или languageCode.

  4. Имя ключа ресурса — это строка, назначенная ValidationAttribute.ErrorMessage атрибуту, а ее значение — локализованное сообщение об ошибке.

Например, следующий атрибут аннотации данных определяет сообщение об ошибке для культуры по умолчанию при недопустимой оценке.

public class RatingInfo
{
   [Required(ErrorMessage = "The rating must be between 1 and 10.")]
   [Display(Name = "Your Rating")]
   public int Rating { get; set; }
}
Public Class RatingInfo
   <Required(ErrorMessage = "The rating must be between 1 and 10.")>
   <Display(Name = "Your Rating")>
   Public Property Rating As Integer = 1
End Class

Затем можно создать файл ресурсов DataAnnotation.Local.fr.resx, ключ которого — строка сообщения об ошибке и значение которого — локализованное сообщение об ошибке. Файл должен находиться в папке App.LocalResources . Например, вот ключ и его значение в локализованном сообщении об ошибке на французском языке (fr):

Имя Ценность
Оценка должна быть от 1 до 10. Оценка должна быть между 1 и 10.

Кроме того, локализация заметок данных расширяема. Разработчики могут подключаться к собственному поставщику локализатора строк, реализуя IStringLocalizerProvider интерфейс для хранения строки локализации где-то, кроме файла ресурсов.

Асинхронная поддержка с поставщиками хранения состояния сеансов

ASP.NET теперь позволяет использовать методы, возвращающие задачи, с поставщиками хранилища состояния сеанса, что позволяет приложениям ASP.NET извлечь преимущества масштабируемости асинхронности. Для поддержки асинхронных операций с поставщиками хранилища состояний сеансов ASP.NET включает новый интерфейс, System.Web.SessionState.ISessionStateModule, который наследует от IHttpModule и позволяет разработчикам реализовать собственный модуль состояния сеанса и асинхронное хранилище сеансов. Интерфейс определяется следующим образом:

public interface ISessionStateModule : IHttpModule {
    void ReleaseSessionState(HttpContext context);
    Task ReleaseSessionStateAsync(HttpContext context);
}
Public Interface ISessionStateModule : Inherits IHttpModule
   Sub ReleaseSessionState(context As HttpContext)
   Function ReleaseSessionStateAsync(context As HttpContext) As Task
End Interface

Кроме того, SessionStateUtility класс включает два новых метода и IsSessionStateReadOnlyIsSessionStateRequired, которые можно использовать для поддержки асинхронных операций.

Асинхронная поддержка для поставщиков выходного кэша

Начиная с .NET Framework 4.6.2, методы возврата задач можно использовать с поставщиками кэша выходных данных для обеспечения преимуществ масштабируемости асинхронного кэша. Поставщики, реализующие эти методы, сокращают блокировку потоков на веб-сервере и повышают масштабируемость службы ASP.NET.

Добавлены следующие API для поддержки поставщиков асинхронного кэша выходных данных:

категории символов

Символы в .NET Framework 4.6.2 классифицируются на основе Unicode Standard, версии 8.0.0. В .NET Framework 4.6 и .NET Framework 4.6.1 символы были классифицированы на основе категорий символов Юникода 6.3.

Поддержка Юникода 8.0 ограничена классификацией символов по CharUnicodeInfo классу и типам и методам, которые полагаются на него. К ним относятся класс StringInfo, перегруженный метод Char.GetUnicodeCategory и классы character распознаваемый подсистемой регулярных выражений .NET Framework. Сравнение символов и строк и сортировка не влияют на это изменение и продолжают полагаться на базовую операционную систему или на Windows 7 системах на символьные данные, предоставляемые .NET Framework.

Сведения об изменениях в категориях символов от Юникод 6.0 до Юникод 7.0 смотрите в Стандарте Юникод версии 7.0.0 на сайте Консорциума Юникода. Для получения сведений об изменениях с Юникода 7.0 до Юникода 8.0 см. раздел «Стандарт Юникода, версия 8.0.0» на сайте консорциума Юникода.

криптография

Поддержка сертификатов X509, содержащих FIPS 186-3 DSA

.NET Framework 4.6.2 добавляет поддержку сертификатов DSA (алгоритм цифровой подписи) X509, ключи которых превышают ограничение FIPS 186-2 1024-разрядной версии.

Помимо поддержки более крупных размеров ключей FIPS 186-3, .NET Framework 4.6.2 позволяет вычислять сигнатуры с семейством хэш-алгоритмов SHA-2 (SHA256, SHA384 и SHA512). Поддержка FIPS 186-3 предоставляется новым System.Security.Cryptography.DSACng классом.

В соответствии с недавними изменениями класса RSA в .NET Framework 4.6 и класса ECDsa в .NET Framework 4.6.1, абстрактный базовый класс DSA в .NET Framework 4.6.2 включает дополнительные методы, позволяющие вызывающим объектам использовать эту функциональность без приведения типов. Вы можете вызвать метод расширения DSACertificateExtensions.GetDSAPrivateKey для подписания данных, как показано в следующем примере.

public static byte[] SignDataDsaSha384(byte[] data, X509Certificate2 cert)
{
    using (DSA dsa = cert.GetDSAPrivateKey())
    {
        return dsa.SignData(data, HashAlgorithmName.SHA384);
    }
}
Public Shared Function SignDataDsaSha384(data As Byte(), cert As X509Certificate2) As Byte()
    Using DSA As DSA = cert.GetDSAPrivateKey()
        Return DSA.SignData(data, HashAlgorithmName.SHA384)
    End Using
End Function

И можно вызвать DSACertificateExtensions.GetDSAPublicKey метод расширения для проверки подписанных данных, как показано в следующем примере.

public static bool VerifyDataDsaSha384(byte[] data, byte[] signature, X509Certificate2 cert)
{
    using (DSA dsa = cert.GetDSAPublicKey())
    {
        return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384);
    }
}
 Public Shared Function VerifyDataDsaSha384(data As Byte(), signature As Byte(), cert As X509Certificate2) As Boolean
    Using dsa As DSA = cert.GetDSAPublicKey()
        Return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384)
    End Using
End Function

Повышенная ясность входных данных для процедур деривации ключей ECDiffieHellman

.NET Framework 3.5 добавила поддержку согласования ключа с использованием эллиптической кривой Диффи-Хеллмана с тремя различными алгоритмами функций вывода ключей (KDF). Входные данные для подпрограмм и сами подпрограммы были настроены с помощью свойств ECDiffieHellmanCng объекта. Поскольку не каждая подпрограмма считывает все свойства ввода, у разработчика оставалось много возможностей для заблуждений.

Для решения этой проблемы в .NET Framework 4.6.2 в базовый класс ECDiffieHellman добавлены следующие три метода, чтобы более четко представить эти подпрограммы KDF и их входные данные:

Метод ECDiffieHellman Описание
DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) Извлекает материал ключа с помощью формулы

HASH(secretPrepend || x || secretAppend)

ХЭШ(secretPrepend Или x Или secretAppend)

где x является вычисляемый результат алгоритма EC Diffie-Hellman.
DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) Извлекает материал ключа с помощью формулы

HMAC(hmacKey, secretPrepend || x || secretAppend)

HMAC(hmacKey, secretPrepend OrElse x OrElse secretAppend)

где x является вычисляемый результат алгоритма EC Diffie-Hellman.
DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) Порождает материал ключа с использованием алгоритма вывода псевдослучайной функции TLS (PRF).

Поддержка симметричного шифрования сохраняемого ключа

Библиотека шифрования Windows (CNG) добавила поддержку хранения сохраненных симметричных ключей и использования аппаратных симметричных ключей, а .NET Framework 4.6.2 позволяет разработчикам использовать эту функцию. Поскольку понятие имен ключей и поставщиков ключей зависит от реализации, для использования этой функции необходимо использовать конструктор конкретных типов реализации вместо предпочтительного фабричного подхода (например, вызов Aes.Create).

Поддержка симметричного шифрования сохраняемого ключа существует для алгоритмов AES (AesCng) и 3DES (TripleDESCng). Например:

public static byte[] EncryptDataWithPersistedKey(byte[] data, byte[] iv)
{
    using (Aes aes = new AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider))
    {
        aes.IV = iv;

        // Using the zero-argument overload is required to make use of the persisted key
        using (ICryptoTransform encryptor = aes.CreateEncryptor())
        {
            if (!encryptor.CanTransformMultipleBlocks)
            {
                throw new InvalidOperationException("This is a sample, this case wasn't handled...");
            }

            return encryptor.TransformFinalBlock(data, 0, data.Length);
        }
    }
}
Public Shared Function EncryptDataWithPersistedKey(data As Byte(), iv As Byte()) As Byte()
    Using Aes As Aes = New AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider)
        Aes.IV = iv

        ' Using the zero-argument overload Is required to make use of the persisted key
        Using encryptor As ICryptoTransform = Aes.CreateEncryptor()
            If Not encryptor.CanTransformMultipleBlocks Then
                Throw New InvalidOperationException("This is a sample, this case wasn't handled...")
            End If
            Return encryptor.TransformFinalBlock(data, 0, data.Length)
        End Using
    End Using
End Function

поддержка SignedXml для хэширования SHA-2

.NET Framework 4.6.2 добавляет поддержку класса SignedXml для методов подписи PKCS#1 RSA-SHA256, RSA-SHA384 и RSA-SHA512 и алгоритмов дайджеста SHA256, SHA384 и SHA512.

Все константы URI раскрыты на SignedXml:

Поле SignedXml Постоянный
XmlDsigSHA256Url "http://www.w3.org/2001/04/xmlenc#sha256"
XmlDsigRSASHA256Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
XmlDsigSHA384Url "http://www.w3.org/2001/04/xmldsig-more#sha384"
XmlDsigRSASHA384Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"
XmlDsigSHA512Url "http://www.w3.org/2001/04/xmlenc#sha512"
XmlDsigRSASHA512Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"

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

SqlClient

.NET Framework Data Provider для SQL Server (System.Data.SqlClient) включает следующие новые функции в .NET Framework 4.6.2:

Пул соединений и таймауты с базами данных Azure SQL

При включении пула подключений и возникновении времени ожидания или другой ошибки входа исключение кэшируется, а кэшированное исключение возникает при любой последующей попытке подключения в течение следующих 5 секунд до 1 минуты. Дополнительные сведения см. в разделе SQL Server Пул подключений (ADO.NET).

Это поведение не желательно при подключении к базам данных Azure SQL, так как попытки подключения могут завершиться сбоем с временными ошибками, которые обычно восстанавливаются быстро. Чтобы оптимизировать процесс повтора подключения, поведение блокирующего периода пула подключений удаляется при сбое подключений к базам данных Azure SQL.

Добавление нового PoolBlockingPeriod ключевого слова позволяет выбрать период блокировки, подходящий для вашего приложения. К числу значений относятся:

Auto

Период блокировки пула подключений для приложения, подключающегося к Azure SQL Database, отключен, а период блокировки пула подключений для приложения, подключающегося к любому другому экземпляру SQL Server, включен. Это значение по умолчанию. Если имя конечной точки сервера заканчивается любым из следующих элементов, они считаются Azure SQL базами данных:

  • .database.windows.net

  • .database.chinacloudapi.cn

  • .database.usgovcloudapi.net

  • .database.cloudapi.de

AlwaysBlock

Период блокировки пула подключений всегда включен.

NeverBlock

Период блокировки пула подключений всегда отключен.

Усовершенствования для Always Encrypted

SQLClient представляет два улучшения для Always Encrypted:

  • Чтобы повысить производительность параметризованных запросов к зашифрованным столбцам базы данных, теперь кэшируются метаданные шифрования для параметров запроса. SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled Если для свойства задано true значение (которое является значением по умолчанию), если один и тот же запрос вызывается несколько раз, клиент получает метаданные параметров с сервера только один раз.

  • Записи ключей шифрования столбцов в кэше ключей теперь удаляются после настраиваемого интервала времени, заданного с помощью свойства SqlConnection.ColumnEncryptionKeyCacheTtl.

Windows Communication Foundation

В .NET Framework 4.6.2 Windows Communication Foundation улучшены в следующих областях:

поддержку безопасности транспорта WCF для сертификатов, хранящихся с помощью CNG

Безопасность транспорта WCF поддерживает сертификаты, хранящиеся с помощью библиотеки шифрования Windows (CNG). В .NET Framework 4.6.2 эта поддержка ограничена использованием сертификатов с открытым ключом с экспонентом не более 32 бит. Когда приложение предназначено для .NET Framework 4.6.2, эта функция включена по умолчанию.

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

<AppContextSwitchOverrides
    value="Switch.System.IdentityModel.DisableCngCertificates=false"
/>

Это также можно сделать программным способом с помощью кода, как показано ниже.

private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificates";
AppContext.SetSwitch(disableCngCertificates, false);
Const DisableCngCertificates As String = "Switch.System.IdentityModel.DisableCngCertificates"
AppContext.SetSwitch(disableCngCertificates, False)

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

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

<runtime>
     <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseTimeZoneInfo=false" />
</runtime>

Если эта функция включена, DataContractJsonSerializer объект использует TimeZoneInfo тип вместо TimeZone типа для десериализации данных даты и времени. TimeZoneInfo поддерживает несколько правил корректировки, что позволяет работать с историческими данными часового пояса; TimeZone Не.

Дополнительную информацию о структуре TimeZoneInfo и корректировках часового пояса см. в разделе «Обзор временной зоны».

NetNamedPipeBinding наилучшее соответствие

WCF имеет новый параметр настройки приложения, который можно задать в клиентских приложениях, чтобы обеспечить постоянное подключение к службе, прослушивающей тот URI, который лучше всего соответствует запрашиваемому URI. Если для этого параметра приложения задано значение false (по умолчанию), клиенты могут NetNamedPipeBinding пытаться подключиться к службе, прослушивающей URI, которая является подстрокой запрошенного URI.

Например, клиент пытается подключиться к службе, прослушивающей net.pipe://localhost/Service1, но другая служба на этом компьютере, работающем с правами администратора, прослушивает net.pipe://localhost. Если в этом параметре приложения установлено значение false, клиент попытается подключиться к неправильной службе. После установки параметра trueприложения клиент всегда будет подключаться к лучшей службе сопоставления.

Заметка

Клиенты, использующие NetNamedPipeBinding, находят службы по базовому адресу службы (если он существует), а не по полному адресу конечной точки. Чтобы этот параметр всегда работал, служба должна использовать уникальный базовый адрес.

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

<configuration>
    <appSettings>
        <add key="wcf:useBestMatchNamedPipeUri" value="true" />
    </appSettings>
</configuration>

ПРОТОКОЛ SSL 3.0 не является протоколом по умолчанию

При использовании NetTcp с безопасностью транспорта и типом учетных данных ssl 3.0 больше не является протоколом по умолчанию, используемым для согласования безопасного подключения. В большинстве случаев не должно быть влияния на существующие приложения, так как TLS 1.0 включен в список протоколов для NetTcp. Все существующие клиенты должны иметь возможность согласовывать подключение с помощью по крайней мере TLS 1.0. Если требуется протокол Ssl3, используйте один из следующих механизмов конфигурации, чтобы добавить его в список согласованных протоколов.

Windows Presentation Foundation (WPF)

В .NET Framework 4.6.2 Windows Presentation Foundation улучшены в следующих областях:

Сортировка групп

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

Для поддержки сортировки групп новые GroupDescription.SortDescriptions и GroupDescription.CustomSort свойства описывают сортировку коллекции групп, созданных GroupDescription объектом. Это аналогично тому, как идентичные именованные ListCollectionView свойства описывают порядок сортировки элементов данных.

Два новых статических PropertyGroupDescription свойства класса CompareNameAscending и CompareNameDescendingмогут использоваться для наиболее распространенных случаев.

Например, следующие данные XAML группируются по возрасту, сортируют возрастные группы по возрастанию и группируют элементы в каждой возрастной группе по фамилии.

<GroupDescriptions>
     <PropertyGroupDescription
         PropertyName="Age"
         CustomSort=
              "{x:Static PropertyGroupDescription.CompareNamesAscending}"/>
     </PropertyGroupDescription>
</GroupDescriptions>

<SortDescriptions>
     <SortDescription PropertyName="LastName"/>
</SortDescriptions>

Поддержка сенсорной клавиатуры

Поддержка сенсорной клавиатуры позволяет отслеживать фокус в приложениях WPF путем автоматического вызова и закрытия сенсорной клавиатуры в Windows 10 при получении сенсорного ввода элементом управления, который может принимать текстовые входные данные.

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

DPI для каждого монитора

Для поддержки недавнего распространения сред с высоким разрешением DPI и гибридным разрешением DPI для приложений WPF, в .NET Framework 4.6.2 добавлена возможность учета каждого монитора. См. образцы и руководство разработчика на GitHub, чтобы узнать больше о том, как сделать ваше WPF приложение поддерживающим DPI для каждого монитора.

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

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

<runtime>
   <AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>

Windows Workflow Foundation (WF)

В .NET Framework 4.6.2 Windows Workflow Foundation был расширен в следующей области:

поддержка выражений C# и IntelliSense в перенесённом WF Designer

Начиная с .NET Framework 4.5 WF поддерживает выражения C# как в конструкторе Visual Studio, так и в рабочих процессах кода. Конструктор повторно размещенных рабочих процессов — это ключевая функция WF, которая позволяет конструктору рабочих процессов находиться в приложении вне Visual Studio (например, в WPF). Windows Workflow Foundation предоставляет возможность поддерживать выражения C# и IntelliSense в повторно размещённом конструкторе рабочих процессов. Дополнительные сведения см. в блоге Windows Workflow Foundation.

Availability of IntelliSense when a customer rebuilds a workflow project from Visual Studio В версиях .NET Framework до 4.6.2 WF Designer IntelliSense нарушается при перестроении проекта рабочего процесса из Visual Studio. Хотя сборка проекта выполнена успешно, типы рабочих процессов не найдены в конструкторе, а предупреждения IntelliSense для отсутствующих типов рабочих процессов отображаются в окне списка ошибок . .NET Framework 4.6.2 устраняет эту проблему и делает IntelliSense доступным.

приложения workflow версии 1 с отслеживанием рабочих процессов в настоящее время выполняются в режиме FIPS

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

<add key="microsoft:WorkflowRuntime:FIPSRequired" value="true" />

Если этот сценарий не включен, запуск приложения продолжает создавать исключение с сообщением "Эта реализация не является частью проверенных алгоритмов шифрования Windows Platform FIPS".

Улучшения рабочего процесса при использовании Dynamic Update с редактором рабочих процессов Visual Studio.

Конструктор рабочих процессов, конструктор действий FlowChart и другие конструкторы действий рабочих процессов теперь успешно загружают и отображают рабочие процессы, сохраненные после вызова DynamicUpdateServices.PrepareForUpdate метода. В версиях платформы .NET Framework до .NET Framework 4.6.2 загрузка XAML-файла в Visual Studio для рабочего процесса, сохраненного после вызова DynamicUpdateServices.PrepareForUpdate может привести к следующим проблемам:

  • Конструктор рабочих процессов не может правильно загрузить XAML-файл (если ViewStateData.Id он находится в конце строки).

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

ClickOnce

ClickOnce обновлен для поддержки TLS 1.1 и TLS 1.2 в дополнение к протоколу 1.0, который он уже поддерживает. ClickOnce автоматически определяет, какой протокол является обязательным; Для включения поддержки TLS 1.1 и 1.2 в приложении ClickOnce не требуются дополнительные шаги.

Преобразование приложений Windows Forms и WPF в приложения UWP

Windows теперь предоставляет возможности для переноса существующих настольных приложений Windows, включая приложения WPF и Windows Forms, в Universal Windows Platform (UWP). Эта технология выступает в качестве моста, позволяя постепенно перенести существующую базу кода в UWP, тем самым приведя приложение ко всем Windows 10 устройствам.

Преобразованные классические приложения получают удостоверение приложения, аналогичное удостоверению приложений UWP, что делает API UWP доступными для включения таких функций, как динамические плитки и уведомления. Приложение продолжает работать как раньше и работает в качестве приложения с полным доверием. После преобразования приложения к существующему процессу полного доверия можно добавить процесс контейнера приложения, чтобы обеспечить адаптивный пользовательский интерфейс. Когда все функции перемещаются в процесс контейнера приложений, процесс полного доверия можно удалить, и новое приложение UWP можно сделать доступным для всех Windows 10 устройств.

Улучшения отладки

API неуправляемой отладки был улучшен в .NET Framework 4.6.2 для выполнения дополнительного анализа при возникновении NullReferenceException. Это позволяет определить, какая переменная в одной строке исходного кода null. Для поддержки этого сценария в неуправляемый API добавлены следующие API-интерфейсы.

Новые возможности .NET Framework 4.6.1

.NET Framework 4.6.1 включает новые функции в следующих областях:

Дополнительные сведения о .NET Framework 4.6.1 см. в следующих разделах:

Криптография: поддержка сертификатов X509, содержащих ECDSA

.NET Framework 4.6 добавил поддержку RSACng для сертификатов X509. .NET Framework 4.6.1 добавляет поддержку сертификатов ECDSA (алгоритма цифровой подписи на основе эллиптических кривых) X509.

ECDSA обеспечивает более высокую производительность и является более безопасным алгоритмом шифрования, чем RSA, предоставляя отличный выбор, где производительность и масштабируемость транспортного уровня безопасности (TLS) является проблемой. Реализация .NET Framework упаковывает вызовы в существующие функции Windows.

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

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

public class Net461Code
{
    public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
    {
        using (ECDsa privateKey = cert.GetECDsaPrivateKey())
        {
            return privateKey.SignData(data, HashAlgorithmName.SHA512);
        }
    }

    public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
    {
        return privateKey.SignData(data, HashAlgorithmName.SHA512);
    }
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates

Public Class Net461Code
    Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
        Using privateKey As ECDsa = cert.GetECDsaPrivateKey()
            Return privateKey.SignData(data, HashAlgorithmName.SHA512)
        End Using
    End Function

    Public Shared Function SignECDsaSha512(data As Byte, privateKey As ECDsa) As Byte()
        Return privateKey.SignData(data, HashAlgorithmName.SHA512)
    End Function
End Class

Это создает отчетливый контраст с кодом, необходимым для генерации подписи в .NET Framework 4.6.

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

public class Net46Code
{
    public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
    {
        // This would require using cert.Handle and a series of p/invokes to get at the
        // underlying key, then passing that to a CngKey object, and passing that to
        // new ECDsa(CngKey).  It's a lot of work.
        throw new Exception("That's a lot of work...");
    }

    public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
    {
        // This way works, but SignData probably better matches what you want.
        using (SHA512 hasher = SHA512.Create())
        {
            byte[] signature1 = privateKey.SignHash(hasher.ComputeHash(data));
        }

        // This might not be the ECDsa you got!
        ECDsaCng ecDsaCng = (ECDsaCng)privateKey;
        ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512;
        return ecDsaCng.SignData(data);
    }
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates

Public Class Net46Code
    Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
        ' This would require using cert.Handle and a series of p/invokes to get at the
        ' underlying key, then passing that to a CngKey object, and passing that to
        ' new ECDsa(CngKey).  It's a lot of work.
        Throw New Exception("That's a lot of work...")
    End Function

    Public Shared Function SignECDsaSha512(data As Byte(), privateKey As ECDsa) As Byte()
        ' This way works, but SignData probably better matches what you want.
        Using hasher As SHA512 = SHA512.Create()
            Dim signature1 As Byte() = privateKey.SignHash(hasher.ComputeHash(data))
        End Using

        ' This might not be the ECDsa you got!
        Dim ecDsaCng As ECDsaCng = CType(privateKey, ECDsaCng)
        ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512
        Return ecDsaCng.SignData(data)
    End Function
End Class

ADO.NET

Следующие компоненты добавлены в ADO.NET.

поддержка Always Encrypted для аппаратных защищенных ключей

ADO.NET теперь поддерживает хранение главных ключей столбцов Always Encrypted непосредственно в аппаратных модулях безопасности (HSM). Благодаря этой поддержке клиенты могут использовать асимметричные ключи, хранящиеся в HSM, без необходимости разрабатывать собственных поставщиков хранилища главного ключа столбцов и регистрировать их в приложениях.

Клиентам необходимо установить поставщика CSP, предоставленного производителем HSM, или поставщиков хранилища ключей CNG на серверах приложений или клиентских компьютерах, чтобы получить доступ к данным Always Encrypted, защищенным главными ключами столбцов, которые хранятся в HSM.

Улучшено MultiSubnetFailover поведение подключения для AlwaysOn

SqlClient теперь автоматически предоставляет более быстрые подключения к группе доступности AlwaysOn (AG). Он прозрачно определяет, подключается ли приложение к группе доступности AlwaysOn в другой подсети и быстро обнаруживает текущий активный сервер и обеспечивает подключение к серверу. До этого релиза приложение должно было задать строку подключения для включения "MultisubnetFailover=true", чтобы указать, что оно подключается к AlwaysOn Availability Group. Без задания ключевого слова true подключения приложение может столкнуться с тайм-аутом при подключении к AlwaysOn Availability Group. В этом выпуске приложению не нужно больше настраивать MultiSubnetFailover на true. Дополнительные сведения о поддержке SqlClient для групп доступности Always On см.: Поддержка SqlClient для высокой доступности и аварийного восстановления.

Windows Presentation Foundation (WPF)

Windows Presentation Foundation включает ряд улучшений и изменений.

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

Задержка при срабатывании событий касания исправлена в .NET Framework 4.6.1. Кроме того, ввод в элемент управления RichTextBox больше не связывает поток отрисовки во время быстрого ввода.

Улучшения проверки орфографии

Средство проверки орфографии в WPF обновлено на Windows 8.1 и более поздних версиях, чтобы использовать поддержку операционной системы для проверки орфографии дополнительных языков. В версиях Windows до Windows 8.1 изменения функциональности отсутствуют.

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

  • xml:lang, если он присутствует.

  • Текущий язык ввода.

  • Текущая культура.

Для получения дополнительной информации о поддержке языков в WPF см. запись в блоге WPF о функциях .NET Framework 4.6.1.

Дополнительная поддержка пользовательских словарей для каждого пользователя

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

В предыдущих версиях WPF специализированные словари не распознавали исключенные слова и списки автозамены. Они поддерживаются в Windows 8.1 и Windows 10 с помощью файлов, которые можно поместить в каталог %AppData%\Microsoft\Spelling\<language tag>. Следующие правила применяются к этим файлам:

  • Файлы должны иметь расширения .dic (для добавленных слов), EXC (для исключенных слов) или ACL (для автозамены).

  • Файлы должны иметь открытый текст UTF-16 LE, который начинается с метки порядка байтов (BOM).

  • Каждая строка должна состоять из слова (в добавленных и исключенных списках слов) или пары автозамены с словами, разделенными вертикальной полосой ("|") (в списке слов автозамены).

  • Эти файлы считаются доступны только для чтения и не изменяются системой.

Заметка

Эти новые форматы файлов не поддерживаются напрямую api проверки орфографии WPF, а пользовательские словари, предоставляемые WPF в приложениях, должны продолжать использовать файлы LEX.

Образцы

Существует ряд примеров WPF в репозитории Microsoft/WPF-Samples GitHub. Помогите нам улучшить наши примеры, отправив нам pull-request или открыв задачу GitHub.

расширения DirectX

WPF включает пакет NuGet, который предоставляет новые реализации D3DImage, что упрощает взаимодействие с содержимым DX10 и DX11. Код для этого пакета был открыт с открытым кодом и доступен on GitHub.

Windows Workflow Foundation: Транзакции

Теперь метод Transaction.EnlistPromotableSinglePhase может использовать диспетчер распределенных транзакций, не MSDTC, для управления транзакцией. Для этого необходимо указать идентификатор промоутера транзакций GUID для новой перегрузки Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid). Если эта операция выполнена успешно, существуют ограничения, связанные с возможностями транзакции. После добавления промоутера транзакций, не связанного с MSDTC, следующие методы вызывают ошибку TransactionPromotionException, так как для этих методов требуется повышение до MSDTC.

После включения в список промоутера транзакций, отличных от MSDTC, он должен использоваться для будущих устойчивых регистраций, используя определённые им протоколы. "Guid" промоутера транзакций можно получить с помощью свойства "PromoterType". Когда транзакция продвигается, промоутер транзакций предоставляет массив Byte, представляющий маркер повышенного уровня. Приложение может получить продвигаемый маркер для транзакции, не связанной с MSDTC, используя метод GetPromotedToken.

Пользователям новой перегрузки Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) необходимо следовать определенной последовательности вызовов, чтобы операция продвижения успешно завершилась. Эти правила описаны в документации метода.

Профилирование

API неуправляемого профилирования был расширен следующим образом:

  • Улучшена поддержка доступа к PDB-файлам в интерфейсе ICorProfilerInfo7.

    В ASP.NET Core становится намного более распространенной практика компиляции сборок в оперативной памяти с помощью Roslyn. Для разработчиков, делающих средства профилирования, это означает, что файлы PDB, которые исторически были сериализованы на диске, больше не могут присутствовать. Средства профилировщика часто используют PDB-файлы для сопоставления кода обратно с исходными строками для таких задач, как покрытие кода или анализ производительности по строкам. Интерфейс ICorProfilerInfo7 теперь включает два новых метода. ICorProfilerInfo7::GetInMemorySymbolsLength и ICorProfilerInfo7::ReadInMemorySymbols, чтобы предоставить эти средства профилировщика с доступом к данным PDB в памяти, используя новые API, профилировщик может получить содержимое PDB в памяти как массив байтов, а затем обработать или сериализовать его на диск.

  • Улучшенное взаимодействие с интерфейсом ICorProfiler.

    Профилировщики, использующие функциональность API ReJit для динамического инструментирования, теперь могут изменять некоторые метаданные. Ранее такие средства могут инструментировать IL в любое время, но метаданные могут изменяться только во время загрузки модуля. Так как IL ссылается на метаданные, это ограничивает типы инструментирования, которые можно сделать. Мы подняли некоторые из этих ограничений, добавив метод ICorProfilerInfo7::ApplyMetaData для поддержки подмножества изменений метаданных после загрузки модуля, в частности путем добавления новых AssemblyRef, TypeRef, TypeSpec, и MemberRefMemberSpecUserString записей. Это изменение делает возможным гораздо более широкий спектр инструментации в режиме реального времени.

Генератор образов NGEN и файлы PDB

Трассировка событий между машинами позволяет клиентам профилировать программу на машине A и просматривать данные профилирования с сопоставлением строк исходного кода на машине B. Используя предыдущие версии .NET Framework, пользователь копировал все модули и нативные изображения с профилированной машины на аналитическую машину, содержащую IL PDB, для создания сопоставления исходного кода с нативными изображениями. Хотя этот процесс может работать хорошо, если файлы относительно малы, например для телефонных приложений, файлы могут быть очень большими в классических системах и требуют значительного времени для копирования.

С помощью NGen PDB, NGen может создать PDB, содержащий сопоставление IL-to-native без зависимости от IL PDB. В нашем сценарии трассировки событий между машинами требуется скопировать исходный образ PDB, созданный машиной A на машину B, и использовать API-интерфейсы доступа к интерфейсу отладки Debug Interface Access APIs для чтения сопоставления исходного кода PDB IL с IL и сопоставления IL с исходным кодом в образе PDB. Объединение этих двух сопоставлений обеспечивает сопоставление исходного и родного. Так как PDB встроенного образа гораздо меньше, чем все модули и встроенные образы, процесс копирования с компьютера A на компьютер B происходит гораздо быстрее.

Новые возможности .NET 2015 г.

.NET 2015 представляет .NET Framework 4.6 и .NET Core. Некоторые новые функции относятся к обоим, а другие функции относятся к .NET Framework 4.6 или .NET Core.

  • ASP.NET Core

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

    MVC, веб-API и веб-страницы объединяются в одну платформу с именем MVC 6. Вы создаете приложения ASP.NET Core с помощью инструментов в Visual Studio 2015 или более поздней версии. Существующие приложения будут работать в новой .NET Framework. Однако для создания приложения, использующего MVC 6 или SignalR 3, необходимо использовать систему проекта в Visual Studio 2015 или более поздней версии.

    Дополнительные сведения см. в разделе ASP.NET Core.

  • обновления ASP.NET

    • API, основанный на задачах, для асинхронной очистки ответов

      ASP.NET теперь предоставляет простой API, основанный на задачах, для асинхронной очистки ответа, HttpResponse.FlushAsync, что позволяет асинхронно сбрасывать ответы, используя поддержку, предоставляемую вашей языковой средой async/await.

    • привязка модели поддерживает методы возврата задач

      В .NET Framework 4.5 ASP.NET добавлена функция привязки модели, которая включила расширяемый, ориентированный на код подход к операциям с данными на основе CRUD на страницах веб-форм и пользовательских элементах управления. Теперь система привязки модели поддерживает методы, возвращающие Task. Эта функция позволяет разработчикам веб-форм получать преимущества масштабируемости асинхронного программирования с удобством системы привязки данных при использовании более новых версий систем объектно-реляционного отображения (ОРМ), включая Entity Framework.

      Асинхронная привязка моделей управляется настройкой конфигурации aspnet:EnableAsyncModelBinding.

      <appSettings>
          <add key=" aspnet:EnableAsyncModelBinding" value="true|false" />
      </appSettings>
      

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

    • поддержка HTTP/2 (Windows 10)

      HTTP/2 — это новая версия протокола HTTP, которая обеспечивает гораздо лучшее использование подключения (меньше циклов между клиентом и сервером), что приводит к снижению задержки загрузки веб-страниц для пользователей. Веб-страницы (в отличие от служб) получают больше всего от HTTP/2, так как протокол оптимизирует для нескольких артефактов, запрашиваемых в рамках единого интерфейса. Поддержка HTTP/2 добавлена в ASP.NET в .NET Framework 4.6. Так как сетевые функции существуют на нескольких уровнях, новые функции были необходимы в Windows, в IIS и в ASP.NET для включения HTTP/2. Чтобы использовать протокол HTTP/2 с ASP.NET, необходимо запустить Windows 10.

      HTTP/2 также поддерживается и по умолчанию для приложений Windows 10 Universal Windows Platform (UWP), использующих API System.Net.Http.HttpClient.

      Чтобы предоставить способ использования функции PUSH_PROMISE в приложениях ASP.NET, новый метод с двумя перегрузками, PushPromise(String) и PushPromise(String, String, NameValueCollection), был добавлен в класс HttpResponse.

      Заметка

      Хотя ASP.NET Core поддерживает ПРОТОКОЛ HTTP/2, поддержка функции PUSH PROMISE еще не добавлена.

      Браузер и веб-сервер (IIS на Windows) выполняют все действия. Вам не нужно выполнять тяжелую работу для пользователей.

      Большинство основных браузеров поддерживают HTTP/2, поэтому, скорее всего, пользователи получат поддержку HTTP/2, если сервер поддерживает его.

    • поддержка протокола привязки токенов

      Корпорация Майкрософт и Google сотрудничают над новым подходом к проверке подлинности, который называется протоколом привязки маркеров . Предпосылка заключается в том, что маркеры проверки подлинности (в кэше вашего браузера) могут быть украдены и использованы преступниками для доступа к иначе защищенным ресурсам (например, вашей банковской учетной записи), не требуя пароля или других привилегированных знаний. Новый протокол направлен на устранение этой проблемы.

      Протокол привязки маркеров будет реализован в Windows 10 в качестве функции браузера. ASP.NET приложения будут участвовать в протоколе, чтобы токены аутентификации были проверены как действительные. Клиент и реализации сервера устанавливают сквозную защиту, указанную протоколом.

    • рандомизированные алгоритмы хеширования строк

      .NET Framework 4.5 был введен рандомизированный алгоритм хэширования строк. Однако она не поддерживается ASP.NET из-за некоторых ASP.NET функций, зависящих от стабильного хэш-кода. В .NET Framework 4.6 теперь поддерживаются случайные хэш-алгоритмы строк. Чтобы включить эту функцию, используйте параметр конфигурации aspnet:UseRandomizedStringHashAlgorithm .

      <appSettings>
          <add key="aspnet:UseRandomizedStringHashAlgorithm" value="true|false" />
      </appSettings>
      
  • ADO.NET

    ADO .NET теперь поддерживает функцию Always Encrypted, доступную в SQL Server 2016. С помощью Always Encrypted SQL Server могут выполнять операции с зашифрованными данными, и лучше всего ключ шифрования находится в приложении в доверенной среде клиента, а не на сервере. Always Encrypted защищает данные клиентов, поэтому базы данных не имеют доступа к данным обычного текста. Шифрование и расшифровка данных происходит прозрачно на уровне драйвера, минимизируя изменения, которые необходимо вносить в существующие приложения. Дополнительные сведения см. в разделе Always Encrypted (Database Engine) и Always Encrypted (разработка клиентов).

  • 64-разрядный компилятор JIT для управляемого кода

    .NET Framework 4.6 включает новую версию 64-разрядного компилятора JIT (первоначально кодовое имя RyuJIT). Новый 64-разрядный компилятор обеспечивает значительные улучшения производительности над более старым 64-разрядным компилятором JIT. Новый 64-разрядный компилятор включен для 64-разрядных процессов, работающих поверх .NET Framework 4.6. Приложение будет работать в 64-разрядном процессе, если оно компилируется как 64-разрядное или AnyCPU и работает в 64-разрядной операционной системе. Несмотря на то, что необходимо сделать переход на новый компилятор как можно более прозрачным, изменения в поведении возможны.

    Новый 64-разрядный компилятор JIT также включает аппаратные функции ускорения SIMD при сочетании с типами с поддержкой SIMD в System.Numerics пространстве имен, что может повысить производительность.

  • улучшения загрузчика сборок

    Загрузчик сборок теперь эффективнее использует память, выгрузив сборки IL после загрузки соответствующего образа NGEN. Это изменение уменьшает виртуальную память, что особенно полезно для больших 32-разрядных приложений (таких как Visual Studio), а также экономит физическую память.

  • Изменения библиотеки базовых классов

    Многие новые API были добавлены в .NET Framework 4.6 для включения ключевых сценариев. К ним относятся следующие изменения и дополнения:

    • реализации IReadOnlyCollection<T>

      Дополнительные коллекции реализуют IReadOnlyCollection<T>, например, Queue<T> и Stack<T>.

    • CultureInfo.CurrentCulture и CultureInfo.CurrentUICulture

      Свойства CultureInfo.CurrentCulture и CultureInfo.CurrentUICulture теперь доступны для чтения и записи, а не только для чтения. При назначении нового объекта CultureInfo этим свойствам также меняются текущая культура потока, определяемая свойством Thread.CurrentThread.CurrentCulture, и текущая культура потока пользовательского интерфейса, определяемая свойствами Thread.CurrentThread.CurrentUICulture.

    • Усовершенствования сборки мусора (GC)

      Теперь класс GC включает методы TryStartNoGCRegion и EndNoGCRegion, которые позволяют отключить сборку мусора во время выполнения критического пути.

      Новая перегрузка метода GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) позволяет управлять тем, будут ли как куча небольших объектов, так и большая куча объектов очищены и уплотнены, или только очищены.

    • Типы с поддержкой SIMD

      Теперь пространство System.Numerics имен включает ряд типов с поддержкой SIMD, таких как Matrix3x2, Matrix4x4, Plane, Quaternion, Vector2, Vector3 и Vector4.

      Так как новый 64-разрядный компилятор JIT также включает аппаратные функции ускорения SIMD, при использовании типов с поддержкой SIMD с новым 64-разрядным компилятором JIT значительно улучшена производительность.

    • Обновления шифрования

      System.Security.Cryptography API обновляется для поддержки криптографических API Windows CNG. Предыдущие версии платформы .NET Framework полностью основывались на более ранней версии API-интерфейсов шифрования Windows в качестве основы для System.Security.Cryptography реализации. У нас были запросы на поддержку API CNG, так как она поддерживает современные алгоритмы шифрования, которые важны для определенных категорий приложений.

      .NET Framework 4.6 включает следующие новые усовершенствования для поддержки API-интерфейсов шифрования CNG Windows:

      • Набор методов расширения для сертификатов X509, System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2) и System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2), которые при возможности возвращают реализацию на основе CNG вместо реализации на основе CAPI. (Некоторые смарт-карты и т. д., по-прежнему требуют CAPI, а API обрабатывают резервный вариант).

      • Класс System.Security.Cryptography.RSACng , который предоставляет реализацию алгоритма RSA CNG.

      • Усовершенствования API RSA, чтобы общие действия больше не требовали приведения типов. Например, для шифрования данных с помощью объекта X509Certificate2 требуется код, как показано ниже в предыдущих версиях .NET Framework.

        RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
        byte[] oaepEncrypted = rsa.Encrypt(data, true);
        byte[] pkcs1Encrypted = rsa.Encrypt(data, false);
        
        Dim rsa As RSACryptoServiceProvider = CType(cert.PrivateKey, RSACryptoServiceProvider)
        Dim oaepEncrypted() As Byte = rsa.Encrypt(data, True)
        Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, False)
        

        Код, использующий новые API шифрования в .NET Framework 4.6, можно переписать следующим образом, чтобы избежать приведения.

        RSA rsa = cert.GetRSAPrivateKey();
        if (rsa == null)
           throw new InvalidOperationException("An RSA certificate was expected");
        
        byte[] oaepEncrypted = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1);
        byte[] pkcs1Encrypted = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1);
        
        Dim rsa As RSA = cert.GetRSAPrivateKey()
        If rsa Is Nothing Then
            Throw New InvalidOperationException("An RSA certificate was expected")
        End If
        
        Dim oaepEncrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1)
        Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1)
        
    • Поддержка преобразования дат и времени в или из Unix-времени

      В структуру DateTimeOffset добавлены следующие новые методы для поддержки преобразования значений даты и времени в или из времени Unix:

    • Переключатели совместимости

      Класс AppContext добавляет новую функцию совместимости, которая позволяет писателям библиотек предоставлять единый механизм отказа для новых функций для своих пользователей. Он устанавливает слабо связанный контракт между компонентами, чтобы сообщить запрос на отказ. Эта возможность обычно важна при изменении существующих функциональных возможностей. И наоборот, уже существует неявное согласие на новые функциональные возможности.

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

      Приложение (или библиотека) может объявлять значение переключателя (которое всегда является значением Boolean), определяемое зависимой библиотекой. Переключатель всегда неявно false. Установка переключателя в положение true активирует его. Явная установка переключателя на false включает новое поведение.

      AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", true);
      
      AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", True)
      

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

      if (!AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", out shouldThrow))
      {
          // This is the case where the switch value was not set by the application.
          // The library can choose to get the value of shouldThrow by other means.
          // If no overrides nor default values are specified, the value should be 'false'.
          // A false value implies the latest behavior.
      }
      
      // The library can use the value of shouldThrow to throw exceptions or not.
      if (shouldThrow)
      {
          // old code
      }
      else
      {
          // new code
      }
      
      If Not AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", shouldThrow) Then
          ' This is the case where the switch value was not set by the application.
          ' The library can choose to get the value of shouldThrow by other means.
          ' If no overrides nor default values are specified, the value should be 'false'.
          ' A false value implies the latest behavior.
      End If
      
      ' The library can use the value of shouldThrow to throw exceptions or not.
      If shouldThrow Then
          ' old code
      Else
          ' new code
      End If
      

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

      • Switch.пространства имен.switchname

      • коммутатор.библиотека.имя коммутатора

    • Изменения в асинхронном шаблоне, основанном на задачах (TAP)

      Для приложений, предназначенных для .NET Framework 4.6, Task и Task<TResult> объекты наследуют культуру и пользовательскую культуру вызывающего потока. Поведение приложений, предназначенных для предыдущих версий .NET Framework или не предназначенных для конкретной версии .NET Framework, не влияет. Более подробную информацию см. в разделе "Культура и асинхронные операции на основе задач" темы класса CultureInfo.

      Класс System.Threading.AsyncLocal<T> позволяет представлять внешние данные, которые являются локальными для заданного асинхронного потока управления, например async метода. Его можно использовать для сохранения данных между потоками. Можно также определить метод обратного вызова, который уведомляется при изменении окружающих данных либо из-за явного изменения свойства AsyncLocal<T>.Value, либо при переходе потока в другой контекст.

      Три удобных метода, Task.CompletedTask, Task.FromCanceledи Task.FromException, были добавлены в асинхронный шаблон на основе задач (TAP) для возврата завершенных задач в определенном состоянии.

      Класс NamedPipeClientStream теперь поддерживает асинхронное взаимодействие с новым ConnectAsync. метод.

    • EventSource теперь поддерживает запись в журнал событий

      Теперь класс можно использовать EventSource для записи административных или операционных сообщений в журнал событий, помимо существующих сеансов ETW, созданных на компьютере. В прошлом для этой функции необходимо было использовать пакет NuGet Microsoft.Diagnostics.Tracing.EventSource. Эта функция теперь встроенна в .NET Framework 4.6.

      Пакет NuGet и .NET Framework 4.6 были обновлены со следующими функциями:

      • Динамические события

        Разрешает события, определенные "на лету", не создавая методы событий.

      • богатые полезные нагрузки

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

      • Отслеживание активности

        Заставляет события запуска и остановки помечать события между собой идентификатором, который представляет все текущие активные активности.

      Для поддержки этих функций перегруженный Write метод был добавлен в EventSource класс.

  • Windows Presentation Foundation (WPF)

    • улучшения в области высокоплотных пиксельных дисплеев (HDPI)

      Поддержка HDPI в WPF теперь лучше в .NET Framework 4.6. Изменения были внесены в округление разметки, чтобы уменьшить случаи обрезания в элементах управления с рамками. По умолчанию эта функция включена, только если для TargetFrameworkAttribute задано значение .NET Framework 4.6. Приложения, предназначенные для более ранних версий платформы, но запущенные в .NET Framework 4.6, могут использовать новое поведение, добавив следующую строку в раздел <runtime> раздела app.config файла:

      <AppContextSwitchOverrides
      value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"
      />
      

      Окна WPF, охватывающие несколько мониторов с различными настройками DPI (мультимониторная конфигурация с разными настройками DPI), теперь полностью отрисовываются без затемнённых областей. Вы можете отказаться от этого поведения, добавив следующую строку в <appSettings> раздел файла app.config, чтобы отключить это новое поведение:

      <add key="EnableMultiMonitorDisplayClipping" value="true"/>
      

      Добавлена поддержка автоматической загрузки правильного курсора на основе параметра DPI в System.Windows.Input.Cursor.

    • Сенсорное управление лучше

      Отчеты клиентов о непредсказуемом поведении при касании в Connect были рассмотрены в .NET Framework 4.6. Пороговое значение двойного касания для приложений магазина Windows и WPF теперь совпадает с Windows 8.1 и выше.

    • поддержка прозрачного дочернего окна

      WPF в .NET Framework 4.6 поддерживает прозрачные дочерние окна в Windows 8.1 и более поздних версиях. Это позволяет вам создавать непрямоугольные и прозрачные дочерние окна в ваших окнах верхнего уровня. Вы можете включить эту функцию, установив для свойства HwndSourceParameters.UsesPerPixelTransparency значение true.

  • Windows Communication Foundation (WCF)

    • Поддержка SSL

      WCF теперь поддерживает протокол SSL версии TLS 1.1 и TLS 1.2, помимо SSL 3.0 и TLS 1.0, при использовании NetTcp с безопасностью транспорта и проверкой подлинности клиента. Теперь можно выбрать используемый протокол или отключить старые менее безопасные протоколы. Это можно сделать, задав SslProtocols свойство или добавив следующее в файл конфигурации.

      <netTcpBinding>
          <binding>
            <security mode= "None|Transport|Message|TransportWithMessageCredential" >
                <transport clientCredentialType="None|Windows|Certificate"
                          protectionLevel="None|Sign|EncryptAndSign"
                          sslProtocols="Ssl3|Tls1|Tls11|Tls12">
                  </transport>
            </security>
          </binding>
      </netTcpBinding>
      
    • Отправка сообщений с помощью различных HTTP-подключений

      WCF теперь позволяет пользователям гарантировать, что некоторые сообщения отправляются с помощью различных базовых HTTP-подключений. Это можно сделать двумя способами.

      • Использование префикса имени группы подключений

        Пользователи могут указать строку, которую WCF будет использовать в качестве префикса для имени группы подключений. Два сообщения с разными префиксами отправляются с помощью различных базовых HTTP-подключений. Задайте префикс, добавив пару "ключ-значение" в свойство Message.Properties сообщения. Ключом является httpTransportConnectionGroupNamePrefix; значением является требуемый префикс.

      • Использование различных фабрик каналов

        Пользователи также могут включить функцию, которая гарантирует, что сообщения, отправленные с помощью каналов, созданных различными фабриками каналов, будут использовать различные базовые HTTP-подключения. Чтобы включить эту функцию, пользователи должны установить следующее: от appSetting до true.

        <appSettings>
            <add key="wcf:httpTransportBinding:useUniqueConnectionPoolPerFactory" value="true" />
        </appSettings>
        
  • Windows Workflow Foundation (WWF)

    Теперь вы можете указать количество секунд, в течение которых служба рабочего процесса будет ожидать запроса на выполнение неупорядоченной операции при наличии незавершенной непроцессной закладки перед истечением времени ожидания для этого запроса. Закладка без протокола — это закладка, которая не связана с невыполненными действиями получения. Некоторые действия создают закладки, не относящиеся к протоколу, в процессе их реализации, поэтому может быть не очевидно, что такая закладка существует. К ним относятся State и Pick. Таким образом, если у вас есть служба рабочего процесса, реализованная с помощью государственного компьютера или содержащего действие выбора, вы, скорее всего, будете иметь закладки, отличные от протокола. Укажите интервал, добавив строку, как показано ниже, в appSettings раздел файла app.config:

    <add key="microsoft:WorkflowServices:FilterResumeTimeoutInSeconds" value="60"/>
    

    Значение по умолчанию — 60 секунд. Если для value задано значение 0, запросы вне порядка немедленно отклоняются с ошибкой с текстом, который выглядит следующим образом:

    Operation 'Request3|{http://tempuri.org/}IService' on service instance with identifier '2b0667b6-09c8-4093-9d02-f6c67d534292' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees.
    

    Это то же сообщение, которое вы получаете, если получено сообщение о внепорядковой операции и нет закладок, не относящихся к протоколу.

    Если значение элемента FilterResumeTimeoutInSeconds не равно нулю, существуют закладки, не относящиеся к протоколу, и истекает тайм-аут, операция завершается с сообщением об ошибке тайм-аута.

  • Транзакции

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

    <add key="Transactions:IncludeDistributedTransactionIdInExceptionMessage" value="true"/>
    

    Значение по умолчанию — false.

  • Сети

    • повторное использование сокета

      Windows 10 включает в себя новый сетевой алгоритм высокой масштабируемости, который позволяет лучше использовать ресурсы компьютера, повторно используя локальные порты для исходящих TCP-подключений. .NET Framework 4.6 поддерживает новый алгоритм, что позволяет .NET приложениям воспользоваться новым поведением. В предыдущих версиях Windows было искусственное ограничение параллельного подключения (обычно 16384, размер динамического диапазона портов по умолчанию), что может ограничить масштабируемость службы, вызвав исчерпание порта при загрузке.

      В .NET Framework 4.6 добавлены два API для включения повторного использования портов, что эффективно удаляет ограничение 64 КБ на одновременные подключения:

      По умолчанию свойство ServicePointManager.ReusePort является false, если только значение HWRPortReuseOnSocketBind в ключе реестра HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 не установлено на 0x1. Чтобы включить повторное использование локального порта для HTTP-подключений ServicePointManager.ReusePort , задайте для свойства значение true. Это приводит к тому, что все исходящие подключения сокета TCP из HttpClient и HttpWebRequest используют новый параметр сокета Windows 10 SO_REUSE_UNICASTPORT, который позволяет повторно использовать локальный порт.

      Разработчики, создающие приложение, работающее только с сокетами, могут указать параметр System.Net.Sockets.SocketOptionName при вызове метода, например Socket.SetSocketOption, чтобы исходящие сокеты могли повторно использовать локальные порты во время привязки.

    • поддержка международных доменных имен и PunyCode

      Новое свойство IdnHostбыло добавлено в Uri класс для повышения поддержки международных доменных имен и PunyCode.

  • Изменение размера в элементах управления Windows Forms.

    Эта функция была расширена в .NET Framework 4.6, чтобы включить DomainUpDown, NumericUpDown, DataGridViewComboBoxColumn, DataGridViewColumn и ToolStripSplitButton типы и прямоугольник, указанный свойством Bounds, используемым при рисовании UITypeEditor.

    Это функция согласия. Чтобы включить это, установите элемент EnableWindowsFormsHighDpiAutoResizing в true в файле конфигурации приложения (app.config).

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Поддержка кодировки кодовой страницы

    .NET Core в основном поддерживает кодировки Юникода и по умолчанию обеспечивает ограниченную поддержку кодировки кодовой страницы. Вы можете добавить поддержку кодировок страниц, доступных в .NET Framework, но не поддерживаемых в .NET Core, регистрируя кодировки страниц с помощью метода Encoding.RegisterProvider. Дополнительные сведения см. в разделе System.Text.CodePagesEncodingProvider.

  • .NET Native

Universal Windows Platform (UWP) приложения, написанные на C# или Visual Basic, могут воспользоваться новой технологией, которая компилирует приложения в машинный код, а не IL. Эта технология создает приложения, которые имеют более быстрое время запуска и выполнения. Дополнительные сведения см. в Компилирование приложений с помощью .NET Native. Обзор .NET Native, который рассматривает, как он отличается от JIT-компиляции и NGEN, и что это означает для вашего кода, см. в разделе .NET Native and Compilation.

Ваши приложения компилируются в машинный код по умолчанию при компиляции с помощью Visual Studio 2015 или более поздней версии. Дополнительные сведения см. в разделе Getting Started with .NET Native.

Для поддержки отладки .NET собственных приложений новые интерфейсы и перечисления были добавлены в неуправляемый API отладки. Дополнительные сведения см. в разделе "Отладка" (справочник по неуправляемых API).

  • Пакеты с открытым исходным кодом для .NET Framework

    .NET основные пакеты, такие как неизменяемые коллекции, SIMD API и сетевые API, такие как те, которые находятся в пространстве имен System.Net.Http теперь доступны в виде пакетов с открытым исходным кодом в GitHub. Чтобы получить доступ к коду, см. раздел .NET GitHub. Дополнительные сведения и способы участия в этих пакетах см. в разделе Introduction to .NET, .NET домашняя страница на GitHub.

Новые возможности .NET Framework 4.5.2

  • Новые API для приложений ASP.NET. Новые методы HttpResponse.AddOnSendingHeaders и HttpResponseBase.AddOnSendingHeaders позволяют проверять и изменять заголовки ответов и код состояния по мере передачи ответа к клиентскому приложению. Рекомендуется использовать эти методы вместо событий PreSendRequestHeaders и PreSendRequestContent; они более эффективны и надежны.

    Этот HostingEnvironment.QueueBackgroundWorkItem метод позволяет планировать небольшие фоновые рабочие элементы. ASP.NET отслеживает эти элементы и предотвращает резкое завершение рабочего процесса IIS до завершения всех фоновых рабочих элементов. Этот метод нельзя вызывать за пределами домена управляемого приложения ASP.NET.

    Новые HttpResponse.HeadersWritten и HttpResponseBase.HeadersWritten свойства возвращают логические значения, указывающие, были ли записаны заголовки ответа. Эти свойства можно использовать, чтобы убедиться, что вызовы API,такие как HttpResponse.StatusCode (которые вызывают исключения, если заголовки были записаны) будут успешными.

  • Настройка размеров в элементах управления Windows Forms. Эта функция была расширена. Теперь можно использовать системную настройку DPI для изменения масштаба компонентов дополнительных элементов управления, таких как стрелка выпадающего списка в полях со списком.

    Это функция согласия. Чтобы включить это, установите элемент EnableWindowsFormsHighDpiAutoResizing в true в файле конфигурации приложения (app.config).

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Новая функция рабочего процесса. Диспетчер ресурсов, использующий EnlistPromotableSinglePhase метод (и, следовательно, реализующий IPromotableSinglePhaseNotification интерфейс), может использовать новый Transaction.PromoteAndEnlistDurable метод, чтобы запросить следующее:

    • Переведите транзакцию в транзакцию Microsoft Distributed Transaction Coordinator (MSDTC).

    • Замените IPromotableSinglePhaseNotification на ISinglePhaseNotification, что является долговечным присоединением, поддерживающим фиксирования в один этап.

    Это можно сделать в одном домене приложения и не требует дополнительного неуправляемого кода для взаимодействия с MSDTC для продвижения. Новый метод можно вызывать только в том случае, если существует незавершенный вызов из System.Transactions в метод IPromotableSinglePhaseNotificationPromote, который реализуется промотируемым участием.

  • Улучшения в профилировании производительности. Следующие новые неуправляемые API профилирования обеспечивают более надежную профилирование:

    Предыдущие реализации ICorProfiler поддерживали отложенную загрузку зависимых сборок. Новые API профилирования требуют, чтобы зависимые сборки, внедренные профилировщиком, загружались немедленно, а не загружаются после полной инициализации приложения. Это изменение не влияет на пользователей существующих ICorProfiler API.

  • Улучшения отладки. Следующие новые неуправляемые API отладки обеспечивают лучшую интеграцию с профилировщиком. Теперь вы можете получить доступ к метаданным, вставленным профилировщиком, а также локальным переменным и кодом, созданным запросами ReJIT компилятора при отладке дампа.

  • Изменения трассировки событий. .NET Framework 4.5.2 обеспечивает внепроцессное, основанное на трассировке событий для Windows (ETW) отслеживание активности для более широкой области. Это позволяет поставщикам Advanced Power Management (APM) предоставлять легкие средства, которые точно отслеживают затраты на отдельные запросы и действия, проходящие через потоки. Эти события возникают только в случае включения контроллеров ETW; таким образом, изменения не влияют на ранее написанный код ETW или на код, который выполняется с отключенным ETW.

  • Инициация транзакции и преобразование её в устойчивую регистрацию

    Transaction.PromoteAndEnlistDurable — это новый API, добавленный в .NET Framework 4.5.2 и 4.6:

    [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")]
    public Enlistment PromoteAndEnlistDurable(Guid resourceManagerIdentifier,
                                              IPromotableSinglePhaseNotification promotableNotification,
                                              ISinglePhaseNotification enlistmentNotification,
                                              EnlistmentOptions enlistmentOptions)
    
    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name:="FullTrust")>
    public Function PromoteAndEnlistDurable(resourceManagerIdentifier As Guid,
                                            promotableNotification As IPromotableSinglePhaseNotification,
                                            enlistmentNotification As ISinglePhaseNotification,
                                            enlistmentOptions As EnlistmentOptions) As Enlistment
    

    Метод может использоваться в перечислении, созданном ранее Transaction.EnlistPromotableSinglePhase в ответ на метод ITransactionPromoter.Promote. Требуется System.Transactions повысить транзакцию до уровня транзакции MSDTC и преобразовать возможное для повышения участие в долговременное участие. После успешного завершения этого метода интерфейс IPromotableSinglePhaseNotification больше не будет ссылаться на интерфейс System.Transactions, и любые будущие уведомления будут поступать в предоставленный интерфейс ISinglePhaseNotification. Присоединение должно действовать как долговременное присоединение, поддерживая журналирование транзакций и восстановление. Дополнительные сведения см. в разделе Transaction.EnlistDurable. Кроме того, поддержка ISinglePhaseNotificationдолжна быть обеспечена при наборе. Этот метод может вызываться только при обработке вызова ITransactionPromoter.Promote. Если это не так, генерируется исключение TransactionException.

Новые возможности .NET Framework 4.5.1

Обновления за апрель 2014 г.:

  • Visual Studio 2013 с обновлением 2 включает обновления шаблонов переносимой библиотеки классов для поддержки следующих сценариев:

    • Api Windows Runtime можно использовать в переносимых библиотеках, предназначенных для Windows 8.1, Windows Phone 8.1 и Windows Phone Silverlight 8.1.

    • Можно включить XAML (типы Windows.UI.XAML) в портативные библиотеки при нацеливании на Windows 8.1 или Windows Phone 8.1. Поддерживаются следующие шаблоны XAML: пустая страница, словарь ресурсов, шаблонный элемент управления и пользовательский элемент управления.

    • Вы можете создать переносимый компонент Windows Runtime (WINMD-файл) для использования в приложениях Магазина, предназначенных для Windows 8.1 и Windows Phone 8.1.

    • Вы можете перенацелить библиотеку классов магазина Windows или Windows Phone Store, например переносимую библиотеку классов.

    Дополнительные сведения об этих изменениях см. в переносной библиотеке классов .

  • Набор содержимого .NET Framework теперь содержит документацию по .NET Native, которая является технологией предварительной компиляции для создания и развертывания приложений Windows. .NET Native компилирует приложения непосредственно в машинный код, а не на промежуточный язык (IL), чтобы повысить производительность. Дополнительные сведения см. в разделе Компиляция приложений с .NET Native.

  • Справочник .NET Framework Reference Source предоставляет новый интерфейс просмотра и расширенные возможности. Теперь вы можете просмотреть исходный код .NET Framework в Интернете, загрузить ссылку для автономного просмотра, а также перейти к источникам (включая исправления и обновления) во время отладки. Дополнительные сведения см. в записи блога A new look for .NET Reference Source.

К новым функциям и усовершенствованиям базовых классов в .NET Framework 4.5.1 относятся:

  • Автоматическое перенаправление привязки для сборок. Начиная с Visual Studio 2013 при компиляции приложения, предназначенного для платформы .NET Framework 4.5.1, перенаправления привязок могут быть добавлены в файл конфигурации приложения, если приложение или его компоненты ссылаются на несколько версий одной сборки. Вы также можете включить эту функцию для проектов, предназначенных для более старых версий .NET Framework. Для получения дополнительной информации см. раздел Как включить и отключить автоматическое перенаправление привязок.

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

  • Возможность явно сжимать кучу больших объектов (LOH) во время сборки мусора. Дополнительные сведения см. в свойстве GCSettings.LargeObjectHeapCompactionMode.

  • Дополнительные улучшения производительности, такие как приостановка приложений ASP.NET, улучшения JIT с несколькими ядрами и ускорение запуска приложений после обновления .NET Framework. Для получения дополнительной информации ознакомьтесь с объявлением .NET Framework 4.5.1 и блогом о приостановке приложений ASP.NET.

К Windows Forms относятся улучшения:

  • Настройка размеров в элементах управления Windows Forms. Вы можете использовать параметр DPI системы для изменения размера компонентов элементов управления (например, значков, отображаемых в сетке свойств), выбрав запись в файле конфигурации приложения (app.config) для приложения. Эта функция в настоящее время поддерживается в следующих элементах управления Windows Forms:

    Чтобы включить эту функцию, добавьте новый <appSettings> элемент в файл конфигурации (app.config) и задайте для элемента EnableWindowsFormsHighDpiAutoResizingзначение true :

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    

Улучшения при отладке приложений .NET Framework в Visual Studio 2013 включают:

  • Возвращает значения в отладчике Visual Studio. При отладке управляемого приложения в Visual Studio 2013 в окне "Авто" отображаются возвращаемые типы и значения для методов. Эта информация доступна для настольных приложений, приложений Windows Store и приложений для Windows Phone. Дополнительные сведения см. в разделе "Изучение возвращаемых значений вызовов методов".

  • Редактирование и продолжение выполнения для 64-разрядных приложений. Visual Studio 2013 поддерживает функцию "Изменить и продолжить" для 64-разрядных управляемых приложений для настольных компьютеров, Windows Store и Windows Phone. Существующие ограничения остаются в силе для 32-разрядных и 64-разрядных приложений (см. последний раздел статьи поддерживаемых изменений кода (C#).

  • Отладка с учётом асинхронности. Чтобы упростить отладку асинхронных приложений в Visual Studio 2013, стек вызовов скрывает код инфраструктуры, предоставляемый компиляторами для поддержки асинхронного программирования, а также цепочки в логических родительских кадрах, чтобы можно было более четко следовать выполнению логической программы. Окно "Задачи" заменяет окно параллельных задач и отображает задачи, относящиеся к определенной точке останова, а также отображает все другие задачи, которые в настоящее время активны или запланированы в приложении. Эту функцию можно прочитать в разделе "Асинхронная отладка" объявления .NET Framework 4.5.1.

  • Улучшена поддержка исключений для компонентов Windows Runtime. В Windows 8.1 исключения, возникающие из приложений Магазина Windows, сохраняют сведения об ошибке, вызвавшей исключение, даже через границы языка. Вы можете прочитать об этой функции в разделе "Разработка приложений для магазина Windows" в объявлении .NET Framework 4.5.1.

Начиная с Visual Studio 2013, вы можете использовать Инструмент управляемой профилируемой оптимизации (Mpgo.exe) для оптимизации приложений для Магазина Windows 8.x, а также настольных приложений.

Новые возможности ASP.NET 4.5.1 можно найти в разделе заметки о выпуске ASP.NET и Web Tools для Visual Studio 2013.

Новые возможности .NET Framework 4.5

Базовые классы

  • Возможность уменьшения перезапуска системы путем обнаружения и закрытия приложений .NET Framework 4 во время развертывания. См. статью Уменьшение числа перезапусков системы при установке .NET Framework 4.5.

  • Поддержка массивов, размер которых превышает 2 гигабайта (ГБ) на 64-разрядных платформах. Эту функцию можно включить в файле конфигурации приложения. См. <gcAllowVeryLargeObjects> элемент, который также содержит другие ограничения на размер объекта и размер массива.

  • Улучшение производительности за счет фоновой сборки мусора на серверах. При использовании сборки мусора сервера в .NET Framework 4.5 фоновая сборка мусора автоматически включается. См. раздел "Сборка мусора фонового сервера" раздела основы сборки мусора разделе.

  • Фоновая JIT-компиляция, которая при необходимости доступна на многоядерных процессорах для повышения производительности приложений. См. ProfileOptimization.

  • Возможность ограничить длительность попыток обработчика регулярных выражений решить регулярное выражение до истечения времени. См. свойство Regex.MatchTimeout.

  • Возможность определить культурные настройки по умолчанию для контекста приложения. См. класс CultureInfo.

  • Поддержка консоли для кодировки Юникода (UTF-16). См. класс Console.

  • Поддержка версий данных, связанных с упорядочением и сравнением культурных строк. См. класс SortVersion.

  • Повышение производительности при получении ресурсов. См. пакет и развертывание ресурсов.

  • Улучшения сжатия ZIP для уменьшения размера сжатого файла. См. System.IO.Compression пространство имен.

  • Возможность настроить контекст отражения для переопределения поведения отражения по умолчанию через CustomReflectionContext класс.

  • Поддержка версии стандарта Internationalized Domain Names in Applications (IDNA) 2008 года, когда класс System.Globalization.IdnMapping используется на Windows 8.

  • Делегирование сравнения строк операционной системе, реализующей Юникод 6.0, когда платформа .NET используется в Windows 8. При выполнении на других платформах платформа .NET Framework включает собственные данные сравнения строк, реализующие Юникод 5.x. Ознакомьтесь с классом String и разделом "Примечания" класса SortVersion.

  • Возможность вычислить хэш-коды для строк на основе домена приложения. См. <UseRandomizedStringHashAlgorithm> элемент.

  • Поддержка рефлексии типов разделена между классами Type и TypeInfo. См. раздел Reflection в .NET Framework для приложений Магазина Windows.

Управляемая среда расширяемости (MEF)

В .NET Framework 4.5 платформа управляемой расширяемости (MEF) предоставляет следующие новые возможности:

  • Поддержка универсальных типов.

  • Модель программирования на основе соглашений, которая позволяет создавать части на основе соглашений об именовании, а не атрибутов.

  • Несколько областей.

  • Подмножество MEF, которое можно использовать при создании приложений магазина Windows 8.x. Это подмножество доступно как скачиваемый пакет из галереи NuGet. Чтобы установить пакет, откройте проект в Visual Studio, выберите Управление пакетами NuGet из меню Проект и найдите пакет Microsoft.Composition.

Дополнительные сведения см. в Managed Extensibility Framework (MEF).

Асинхронные операции с файлами

В .NET Framework 4.5 новые асинхронные функции были добавлены на C# и Visual Basic языках. Эти функции добавляют модель на основе задач для выполнения асинхронных операций. Чтобы использовать эту новую модель, используйте асинхронные методы в классах ввода-вывода. См. асинхронные операции ввода-вывода файлов.

Инструменты

В .NET Framework 4.5 генератор файлов ресурсов (Resgen.exe) позволяет создать resw-файл для использования в приложениях магазина Windows 8.x из файла ресурсов, внедренного в сборку .NET Framework. Дополнительные сведения см. в Resgen.exe (генератор файлов ресурсов).

Оптимизация управляемого профиля (Mpgo.exe) позволяет улучшить время запуска приложения, использование памяти (размер рабочего набора) и пропускную способность путем оптимизации сборок образов в нативном коде. Средство командной строки создает данные профиля для сборок приложений собственного образа. См. Mpgo.exe (инструмент оптимизации управляемого профиля). Начиная с Visual Studio 2013, можно использовать Mpgo.exe для оптимизации приложений магазина Windows 8.x, а также классических приложений.

Параллельные вычисления

.NET Framework 4.5 предоставляет несколько новых функций и улучшений для параллельных вычислений. К ним относятся улучшенная производительность, повышение контроля, улучшенная поддержка асинхронного программирования, новая библиотека потока данных и улучшенная поддержка параллельного отладки и анализа производительности. Ознакомьтесь с записью Что нового в области параллелизма в .NET Framework 4.5 в блоге по параллельному программированию с .NET.

Паутина

ASP.NET 4.5 и 4.5.1 добавляют привязку модели для веб-форм, поддержку WebSocket, асинхронные обработчики, улучшения производительности и многие другие функции. Дополнительные сведения см. в следующих ресурсах:

Нетворкинг

.NET Framework 4.5 предоставляет новый интерфейс программирования для приложений HTTP. Дополнительные сведения см. в новых пространствах имен System.Net.Http и System.Net.Http.Headers.

Поддержка также предоставляется для нового программного интерфейса для приёма и взаимодействия с соединением WebSocket с использованием существующих классов HttpListener и связанных с ними. Дополнительные сведения см. в новом System.Net.WebSockets пространстве имен и HttpListener классе.

Кроме того, .NET Framework 4.5 включает следующие улучшения сети:

  • Поддержка URI, совместимого с RFC. Дополнительные сведения см. в Uri и в связанных с ним классах.

  • Поддержка синтаксического анализа международного доменного имени (IDN). Дополнительные сведения см. в Uri и в связанных с ним классах.

  • Поддержка интернационализации адресов электронной почты (EAI). Дополнительные сведения см. в System.Net.Mail пространстве имен.

  • Улучшена поддержка IPv6. Дополнительные сведения см. в System.Net.NetworkInformation пространстве имен.

  • Поддержка сокетов с двойным режимом. Для получения дополнительной информации см. классы Socket и TcpListener.

Windows Presentation Foundation (WPF)

В .NET Framework 4.5 Windows Presentation Foundation (WPF) содержит изменения и улучшения в следующих областях:

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

  • Новый INotifyDataErrorInfo интерфейс, поддерживающий синхронную и асинхронную проверку данных.

  • Новые возможности для VirtualizingPanel классов и Dispatcher классов.

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

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

  • Изменение положения данных по мере изменения значений (динамическое формирование).

  • Возможность проверить, отключен ли контекст данных для контейнера элементов.

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

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

Windows Communication Foundation (WCF)

В .NET Framework 4.5 добавлены следующие функции, чтобы упростить запись и обслуживание приложений Windows Communication Foundation (WCF):

  • Упрощение созданных файлов конфигурации.

  • Поддержка разработки, ориентированной на контракт.

  • Возможность настроить режим совместимости ASP.NET проще.

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

  • Изменения внесены в класс XmlDictionaryReaderQuotas, чтобы снизить вероятность необходимости ручной настройки квот для чтения словарей XML.

  • Проверка файлов конфигурации WCF путем Visual Studio в рамках процесса сборки, поэтому перед запуском приложения можно обнаружить ошибки конфигурации.

  • Новая асинхронная поддержка потоковой передачи.

  • Новое сопоставление для протокола HTTPS, упрощающее процесс публикации конечной точки по протоколу HTTPS с использованием Internet Information Services (IIS).

  • Возможность создавать метаданные в одном документе WSDL путем добавления ?singleWSDL к URL-адресу службы.

  • Поддержка WebSockets для обеспечения двунаправленной связи через порты 80 и 443 с характеристиками производительности, аналогичными используемым в транспортировке по TCP.

  • Поддержка настройки служб в коде.

  • Подсказки редактора XML.

  • ChannelFactory поддержка кэширования.

  • Поддержка сжатия для двоичного кодировщика.

  • Поддержка транспорта UDP, позволяющего разработчикам писать службы, использующие обмен сообщениями "fire and forget". Клиент отправляет сообщение в службу и не ожидает ответа от службы.

  • Возможность поддерживать несколько способов аутентификации на одном конечном узле WCF при использовании протокола HTTP и транспортной безопасности.

  • Поддержка служб WCF, использующих международные доменные имена (IDN).

Дополнительные сведения см. в разделе новинки в Windows Communication Foundation.

Windows Workflow Foundation (WF)

В .NET Framework 4.5 были добавлены несколько новых функций в Windows Workflow Foundation (WF), в том числе:

  • Рабочие процессы конечных автоматов, которые были впервые представлены в составе .NET Framework 4.0.1 (.NET Framework 4 Platform Update 1). Это обновление включало несколько новых классов и действий, которые позволили разработчикам создавать рабочие процессы компьютера состояния. Эти классы и действия были обновлены для .NET Framework 4.5, чтобы включить:

    • Возможность задавать точки останова для состояний.

    • Возможность копирования и вставки переходов в конструктор рабочих процессов.

    • Поддержка инструментов разработки для создания переходов с общим триггером.

    • Действия по созданию рабочих процессов компьютера состояния, включая StateMachine, Stateи Transition.

  • Расширенные функции конструктора рабочих процессов, такие как следующие:

    • Расширенные возможности поиска рабочих процессов в Visual Studio, включая Quick Find и Find в файлах.

    • Возможность автоматического создания действия Sequence при добавлении второго дочернего действия в действие-контейнер и включения обоих действий в действие Sequence.

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

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

    • Возможность добавлять заметки в действия.

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

    • Автоматическое подключение и автоматическая вставка для действий и переходов в рабочих процессах государственного компьютера и блок-схемы.

  • Хранение сведений о состоянии представления для рабочего процесса в одном элементе в XAML-файле, чтобы можно было легко найти и изменить сведения о состоянии представления.

  • Действие контейнера NoPersistScope, чтобы предотвратить сохранение дочерних действий.

  • Поддержка выражений C#:

    • Проекты рабочих процессов, использующие Visual Basic, будут использовать выражения Visual Basic, а проекты рабочих процессов C# будут использовать выражения C#.

    • Проекты рабочих процессов C#, созданные в Visual Studio 2010 г. и имеющие Visual Basic выражения, совместимы с проектами рабочих процессов C#, используюющими выражения C#.

  • Улучшения управления версиями:

    • Новый WorkflowIdentity класс, который обеспечивает сопоставление между сохраненным экземпляром рабочего процесса и его определением рабочего процесса.

    • Параллельное выполнение нескольких версий рабочих процессов в одном узле, включая WorkflowServiceHost.

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

  • Разработка сервисов рабочих процессов с приоритетом на контракт, обеспечивающая поддержку автоматического создания действий, соответствующих существующему контракту сервиса.

Дополнительные сведения см. в разделе Что нового в Windows Workflow Foundation.

.NET для приложений магазина Windows 8.x

приложения магазина Windows 8.x предназначены для определенных форм-факторов и используют возможности операционной системы Windows. Подмножество .NET Framework 4.5 или 4.5.1 доступно для создания приложений магазина Windows 8.x для Windows с помощью C# или Visual Basic. Это подмножество называется .NET для приложений Магазина Windows 8.x и рассматривается в обзоре.

Переносимые библиотеки классов

Проект переносимой библиотеки классов в Visual Studio 2012 (и более поздних версиях) позволяет создавать управляемые сборки, работающие на нескольких платформах .NET Framework. Используя проект переносимой библиотеки классов, вы выбираете платформы (например, Windows Phone и .NET для приложений магазина Windows 8.x) для целевых целей. Доступные типы и члены проекта автоматически ограничиваются общими типами и членами на этих платформах. Дополнительные сведения см. в переносимой библиотеке классов.

См. также