Обучение
Модуль
Реализация операций HTTP в ASP.NET Razor Pages - Training
Реализация операций HTTP в ASP.NET Razor Pages
Этот браузер больше не поддерживается.
Выполните обновление до Microsoft Edge, чтобы воспользоваться новейшими функциями, обновлениями для системы безопасности и технической поддержкой.
Примечание
Платформа .NET Framework обслуживается независимо от обновлений Windows с исправлениями ошибок безопасности и надежности. Как правило, обновления системы безопасности выпускаются ежеквартально. Платформа .NET Framework будет по-прежнему включена в Windows без планов его удаления. Вам не нужно переносить приложения .NET Framework, но для новой разработки используйте .NET 8 или более поздней версии.
В этой статье приведены основные сведения о новых функциях и улучшениях в следующих версиях .NET Framework:
Эта статья не предоставляет исчерпывающую информацию о каждой новой функции и подлежит изменению. Общую информацию о .NET Framework см. в разделе Начало работы. См. поддерживаемые платформы в разделе системные требования. Ссылки для скачивания и инструкции по установке см. в руководстве по установке .
Примечание
Команда .NET Framework также выпускает функции вне полосы, используя NuGet, для расширения поддержки платформы и внедрения новых функций, таких как неизменяемые коллекции и типы векторов с поддержкой SIMD. Дополнительные сведения см. в разделе Дополнительные библиотеки классов и API-интерфейсы и .NET Framework и выпуски вне диапазона. См. полный список пакетов NuGet для .NET Framework.
Платформа .NET Framework 4.8.1 основана на предыдущих версиях .NET Framework 4.x, добавив множество новых исправлений и несколько новых функций, оставаясь очень стабильным продуктом.
Вы можете скачать .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.
.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. Ниже приведены требования к подсказкам.
В Windows Forms эта поддержка доступна только в операционных системах Windows 11 или более поздней версии. Windows Forms — это тонкая управляемая оболочка вокруг API Windows, а новое поведение подсказки стало доступно только в Windows 11. WPF не имеет зависимостей версий операционной системы для подсказок со специальными возможностями.
WPF реализовал большинство требований к подсказкам, совместимым с WCAG2.1, в .NET Framework 4.8. В этом выпуске WPF улучшила работу, гарантируя, что подсказка в текущем окне можно легко закрыть с помощью клавиши ESC
Windows Forms был первым стеком пользовательского интерфейса Windows, созданным для .NET Framework. Таким образом, изначально она была создана для использования устаревшей технологии специальных возможностей, которая не соответствует текущим требованиям к специальным возможностям. В этом выпуске Windows Forms рассмотрела ряд проблем. Полный список изменений, связанных со специальными возможностями, см. в Что нового в специальных возможностях в .NET Framework.
Основные сведения об улучшениях Windows Forms в .NET Framework 4.8.1:
поддержка шаблона текста— Windows Forms добавила поддержку шаблона текста UIA. Этот шаблон позволяет вспомогательным технологиям перемещаться по содержимому текстового поля или аналогичного текстового элемента управления по буквам. Он позволяет выбрать текст в элементе управления и изменить его, а новый текст вставить на курсоре. Windows Forms добавила эту поддержку для ячеек TextBox, DataGridView, элементов управления ComboBox и многое другое.
Устраните проблемы с контрастностью. В нескольких элементах управления изменен коэффициент контрастности прямоугольников выбора в Windows Forms, чтобы они стали темнее и более заметными.
Исправлено несколько проблем DataGridView:
Платформа .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.
снижение влияния FIPS на криптографию. В предыдущих версиях .NET Framework управляемые классы поставщиков шифрования, такие как SHA256Managed вызывают CryptographicException при настройке системных криптографических библиотек в режиме FIPS. Эти исключения возникают из-за того, что управляемые версии классов поставщиков шифрования, в отличие от системных криптографических библиотек, не прошли сертификацию FIPS (федеральные стандарты обработки информации) 140-2. Так как немногие разработчики имеют свои компьютеры разработки в режиме FIPS, исключения часто возникают в рабочих системах.
По умолчанию в приложениях, предназначенных для .NET Framework 4.8, следующие классы управляемой криптографии больше не вызывают CryptographicException в этом случае:
Вместо этого эти классы перенаправляют криптографические операции в системную библиотеку шифрования. Это изменение эффективно устраняет потенциально запутанную разницу между средами разработчика и рабочими средами и делает собственные компоненты и управляемые компоненты работают в той же политике шифрования. Приложения, зависящие от этих исключений, могут восстановить предыдущее поведение, задав параметру AppContext Switch.System.Security.Cryptography.UseLegacyFipsThrow
значение true
. Дополнительные сведения см. в разделе . Классы управляемой криптографии не выдают исключение CryptographyException в режиме FIPS.
Использование обновленной версии ZLib
Начиная с .NET Framework 4.5, сборка clrcompression.dll использует ZLib, собственную внешнюю библиотеку для сжатия данных, чтобы обеспечить реализацию алгоритма дефляции. Версия .NET Framework 4.8 clrcompression.dll обновляется для использования ZLib версии 1.2.11, которая включает несколько ключевых улучшений и исправлений.
введение в понятие 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
, OnListenerFailure
, OnThrottlePercentExceeded
), и код ответа HTTP можно указать для каждого параметра запроса. Если код ответа HTTP опущен для параметра запроса, по умолчанию используется код ответа HTTP 503. Например:
OnServiceFailure: 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-страницу.
Улучшения для высокого разрешения DPI
В .NET Framework 4.8 WPF добавляет поддержку DPI-осведомленности версии 2 (Per-Monitor) и масштабирования DPI (Mixed-Mode). См. для дополнительной информации о разработке приложений с высокими DPI на Windows.
Платформа .NET Framework 4.8 улучшает поддержку взаимодействия размещенных HWND и Windows Forms в High-DPI приложениях WPF на платформах, поддерживающих масштабирование Mixed-Mode DPI (начиная с обновления Windows 10 апреля 2018 г.). Если размещенные элементы управления HWND или элементы управления Windows Forms создаются как Mixed-Mode масштабируемых окон DPI путем вызова SetThreadDpiHostingBehavior и SetThreadDpiAwarenessContext, их можно разместить в приложении WPF Per-Monitor версии 2 WPF и масштабировать их соответствующим образом. Такое размещенное содержимое не отображается в собственном DPI; Вместо этого операционная система масштабирует размещенное содержимое до соответствующего размера. Поддержка режима осведомленности DPI Per-Monitor версии 2 также позволяет размещать элементы управления 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 или стороннего антивредоносного программного обеспечения. Однако сборки, загруженные из других источников, например методом Assembly.Load(Byte[]), не сканируются и могут содержать неявные вредоносные программы. Начиная с .NET Framework 4.8, работающего в Windows 10, среда выполнения запускает сканирование антивирусными решениями, реализующими интерфейс сканирования антивирусных программ (AMSI).
.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 Framework, но работающие в .NET Framework 4.7.2, могут использовать это поведение, добавив следующий параметр AppContext в файл конфигурации приложения:
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=false" />
Дополнительные API для работы с коллекциями
.NET Framework 4.7.2 добавляет несколько новых API в типы SortedSet<T> и HashSet<T>. К ним относятся:
методы TryGetValue
, которые расширяют шаблон проб, используемый в других типах коллекций, до этих двух типов. Ниже приведены методы.
Методы расширения типа Enumerable.To*
, преобразующие коллекцию в HashSet<T>:
Новые конструкторы HashSet<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
Поддержка внедрения зависимостей в веб-формах
Внедрение зависимостей (DI) отделяет объекты и их зависимости, так что код объекта больше не требует изменений из-за того что изменилась зависимость. При разработке ASP.NET приложений, предназначенных для .NET Framework 4.7.2, можно:
Используйте инъекцию на основе сеттеров, интерфейсов и конструкторов в обработчиках и модулях , в экземплярах страниц, и в пользовательских элементах управления проектов веб-приложений ASP.NET.
Используйте внедрение через сеттеры и интерфейсы в обработчиках и модулях , экземплярах Pageи элементах управления проектов веб-сайта ASP.NET.
Подключайте различные фреймворки внедрения зависимостей.
Поддержка файлов 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 и 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 для 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 теперь предоставляет реализацию для этих свойств. Свойства:
поддержка универсальной проверки подлинности 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 поддерживает многофакторную проверку подлинности, а также существующие методы проверки подлинности (пароль и встроенная проверка подлинности), что позволяет пользователям вводить пароли пользователей в интерактивном режиме без сохранения паролей в строке подключения.
Дополнительные сведения и пример см. в статье "Поддержка универсальной и многофакторной проверки подлинности 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 на базе анклавов:
Пользователь создает подключение Always Encrypted к SQL Server, который поддерживает Always Encrypted на основе анклава. Драйвер обращается к службе аттестации, чтобы убедиться, что он подключается к правильному анклаву.
После аттестации анклава драйвер устанавливает безопасный канал с безопасным анклавом, размещенным на SQL Server.
Драйвер делится ключами шифрования, авторизованными клиентом, с безопасным анклавом на время соединения SQL.
Поиск 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, может потребоваться расширить эту возможность для обработки ссылок на статические. Первым шагом в этом процессе является поиск владельцев словаря; то есть, чтобы найти все объекты, 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
.
Приложения с поддержкой HDPI для Windows Forms, Windows Presentation Foundation (WPF) и инструменты Visual Studio для 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.
поддержка .NET Standard 2.0
.NET Standard определяет набор API, которые должны быть доступны для каждой реализации .NET, поддерживающей ту версию стандарта. .NET Framework 4.7.1 полностью поддерживает .NET Standard 2.0 и добавляет около 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.
поддержка для построителей конфигураций
Построители конфигураций позволяют разработчикам внедрять и создавать параметры конфигурации для приложений динамически во время выполнения. Пользовательские построители конфигураций можно использовать для изменения существующих данных в разделе конфигурации или создания раздела конфигурации полностью с нуля. Без построителей конфигураций .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 и связанных с ним обобщенных типов помечаются как сериализуемые, что позволяет использовать двоичную сериализацию. Это должно упростить миграцию типов кортежей, таких как Tuple<T1,T2,T3> и Tuple<T1,T2,T3,T4>, к типам значений-кортежей. Дополнительные сведения см. в разделе "Компилятор - ValueTuple является сериализуемым" в записи блога о возможностях среды выполнения и компилятора .NET Framework 4.7.1 .
поддержка ссылок только для чтения
.NET Framework 4.7.1 добавляет функцию под кодовым названием System.Runtime.CompilerServices.IsReadOnlyAttribute. Этот атрибут используется компиляторами языка для пометки элементов с возвращаемыми типами или параметрами только для чтения. Дополнительные сведения см. в разделе "Компилятор — поддержка readonlyreferences" в посте блога .NET Framework 4.7.1 Runtime и компилятора. Сведения о возвращаемых значениях ссылок см. в возвращаемых значениях ссылок и локальных ссылках и возвращаемых значениях ссылок (Visual Basic).
Усовершенствования в производительности сборки мусора
Изменения сборки мусора (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 обрабатывает запросы в предопределенном конвейере, включающее 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" в блоге о .NET Framework 4.7.1, ASP.NET и функциях конфигурации.
ASP.NET синтаксический анализ HttpCookie
.NET Framework 4.7.1 включает новый метод, HttpCookie.TryParse, который предоставляет стандартный способ создания объекта HttpCookie из строки и точного назначения значений cookie, таких как дата окончания срока действия и путь. Дополнительные сведения см. в статье "Разбор 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 остается стандартным, и алгоритм хэша, отличный от по умолчанию, можно определить в файле веб-конфигурации.
Важно!
Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Если вы подключаетесь к SQL Azure, Управляемые удостоверения Azure ресурсов — это рекомендуемый метод проверки подлинности.
.NET Framework 4.7 включает новые функции в следующих областях:
Список новых API, добавленных в .NET Framework 4.7, см. в разделе изменения API .NET Framework 4.7 на сайте GitHub. Список улучшений функций и исправлений ошибок в .NET Framework 4.7 см. в списке изменений .NET Framework 4.7 на сайте GitHub. Дополнительные сведения см. в статье Объявление .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.
Вы увидите пример улучшений шифрования .NET Framework 4.7 на сайте GitHub.
Улучшена поддержка символов управления функцией 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 и up-stack, такими как HTTP, FTP и SMTP, позволяет разработчикам использовать протоколы TLS по умолчанию, поддерживаемые операционной системой. Разработчикам больше не нужен жесткий код версии TLS.
В .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) добавляет следующие функции и изменения:
возможность настройки параметров безопасности сообщений по умолчанию для 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 включает ряд изменений кода, которые устраняют условия гонки, тем самым повышая производительность и надежность параметров сериализации. К ним относятся:
В .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.
В .NET Framework 4.7 WPF включает следующие улучшения:
Поддержка стека сенсорного ввода или стилуса на основе сообщений Windows WM_POINTER
Теперь у вас есть возможность использования сенсорного или стилусного стека на основе сообщений WM_POINTER вместо платформы Windows Ink Services (WISP). Это функция согласия в .NET Framework. Для получения дополнительной информации см. в разделе совместимости приложений.
Новая реализация api печати WPF
API печати WPF в классе System.Printing.PrintQueue вызывают Windows API пакета печатных документов вместо устаревшего XPS Print API . Сведения о влиянии этого изменения на совместимость приложений см. в разделе Совместимость приложений.
Платформа .NET Framework 4.6.2 включает новые функции в следующих областях:
Windows Communication Foundation (Фундамент Windows для связи)
преобразование приложений Windows Forms и WPF в приложения UWP
Список новых API, добавленных в .NET Framework 4.6.2, см. в разделе изменения API .NET Framework 4.6.2 на сайте GitHub. Список улучшений функций и исправлений ошибок в .NET Framework 4.6.2 см. в списке изменений .NET Framework 4.6.2 на сайте GitHub. Дополнительные сведения см. в статье Объявление о .NET Framework 4.6.2 в блоге на сайте .NET.
В .NET Framework 4.6.2 ASP.NET включает следующие улучшения:
Улучшена поддержка локализованных сообщений об ошибках в валидаторах аннотаций данных
Валидаторы аннотаций данных позволяют вам выполнять проверку, добавляя один или несколько атрибутов в свойство класса. Элемент ValidationAttribute.ErrorMessage атрибута определяет текст сообщения об ошибке, если проверка завершается ошибкой. Начиная с .NET Framework 4.6.2, ASP.NET упрощает локализацию сообщений об ошибках. Сообщения об ошибках будут локализованы, если:
В атрибуте проверки содержится ValidationAttribute.ErrorMessage.
Файл ресурса хранится в папке App_LocalResources.
Имя файла локализованных ресурсов имеет форму DataAnnotation.Localization.{
name}.resx
, где имя — это имя языка и региональных параметров в формате languageCode-
country/regionCode или languageCode.
Ключевым именем ресурса является строка, назначенная атрибуту 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 для хранения строки локализации в другом месте, кроме файла ресурса.
поддержку Async с поставщиками хранилища состояний сеансов
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 включает два новых метода, IsSessionStateReadOnly и IsSessionStateRequired, которые можно использовать для поддержки асинхронных операций.
Асинхронная поддержка для поставщиков выходного кэша
Начиная с .NET Framework 4.6.2, методы возврата задач можно использовать с поставщиками кэша выходных данных, чтобы обеспечить преимущества масштабируемости асинхронного доступа. Поставщики, реализующие эти методы, сокращают блокировку потоков на веб-сервере и повышают масштабируемость службы ASP.NET.
Добавлены следующие API для поддержки поставщиков асинхронного кэша выходных данных:
Класс System.Web.Caching.OutputCacheProviderAsync, который наследует от System.Web.Caching.OutputCacheProvider и позволяет разработчикам реализовать поставщик асинхронного кэша выходных данных.
Класс OutputCacheUtility, который предоставляет вспомогательные методы для настройки кэша выходных данных.
18 новых методов в классе System.Web.HttpCachePolicy. К ним относятся GetCacheability, GetCacheExtensions, GetETagGetETagFromFileDependencies, GetMaxAge, GetMaxAge, GetNoStore, GetNoTransforms, GetOmitVaryStar, GetProxyMaxAge, GetRevalidation, GetUtcLastModified, GetVaryByCustom, HasSlidingExpirationи IsValidUntilExpires.
2 новых метода в классе System.Web.HttpCacheVaryByContentEncodings: GetContentEncodings и SetContentEncodings.
2 новых метода в классе System.Web.HttpCacheVaryByHeaders: GetHeaders и SetHeaders.
2 новых метода в классе System.Web.HttpCacheVaryByParams: GetParams и SetParams.
В классе System.Web.Caching.AggregateCacheDependency есть метод GetFileDependencies.
В CacheDependencyметод GetFileDependencies.
Символы в .NET Framework 4.6.2 классифицируются на основе Стандарт Юникода версии 8.0.0. В .NET Framework 4.6 и .NET Framework 4.6.1 символы были классифицированы на основе категорий символов Юникода 6.3.
Поддержка Юникода 8.0 ограничена классификацией символов по классу CharUnicodeInfo и типам и методам, которые полагаются на него. К ним относятся класс StringInfo, перегруженный метод Char.GetUnicodeCategory, а также классы символов , распознаваемые подсистемой регулярных выражений .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 добавляет поддержку сертификатов X509 DSA (алгоритм цифровой подписи), ключи которых превышают ограничение 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 добавила поддержку соглашения по ключу на основе эллиптической кривой Diffie-Hellman с тремя различными подпрограммами функции формирования ключей (KDF). Входные данные подпрограмм и сами подпрограммы были настроены с помощью свойств объекта ECDiffieHellmanCng. Поскольку не каждая подпрограмма считывает все свойства ввода, у разработчика оставалось много возможностей для заблуждений.
Чтобы устранить эту проблему в .NET Framework 4.6.2, в базовый класс ECDiffieHellman были добавлены следующие три метода, чтобы более четко представить эти подпрограммы KDF и их входные данные:
Метод ECDiffieHellman | Описание |
---|---|
DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) | Извлекает материал ключа с помощью формулы HASH(secretPrepend || x || secretAppend) ХЭШ(secretPrepend Или x Или secretAppend) где x — результат вычисления алгоритма Diffie-Hellman EC. |
DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) | Извлекает ключевой материал с помощью формулы. HMAC(hmacKey, secretPrepend || x || secretAppend) HMAC(hmacKey, secretPrepend OrElse x OrElse secretAppend) где x — результат вычисления алгоритма Diffie-Hellman EC. |
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 и методов подписи RSA-SHA256, RSA-SHA384, и RSA-SHA512 PKCS#1, а также для алгоритмов дайджеста 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 больше не требуется.
Поставщик данных .NET Framework для SQL Server (System.Data.SqlClient) включает следующие новые функции в .NET Framework 4.6.2:
пул подключений и тайм-ауты в базах данных SQL Azure
При включении пула подключений и возникновении времени ожидания или другой ошибки входа исключение кэшируется, а кэшированное исключение возникает при любой последующей попытке подключения в течение следующих 5 секунд до 1 минуты. Дополнительные сведения см. в пула подключений SQL Server (ADO.NET).
Это поведение не рекомендуется при подключении к базам данных SQL Azure, так как попытки подключения могут завершиться с временными ошибками, которые обычно восстанавливаются быстро. Чтобы оптимизировать процесс повтора подключения, поведение блокирующего периода пула подключений удаляется при сбое подключений к базам данных SQL Azure.
Добавление нового ключевого слова PoolBlockingPeriod
позволяет выбрать период блокировки, подходящий для вашего приложения. К числу значений относятся:
Период блокировки пула подключений для приложения, подключающегося к базе данных SQL Azure, отключен, а период блокировки пула подключений для приложения, подключающегося к любому другому экземпляру SQL Server, включен. Это значение по умолчанию. Если имя конечной точки сервера заканчивается любым из следующих элементов, они считаются базами данных SQL Azure:
.database.windows.net
.database.chinacloudapi.cn
.database.usgovcloudapi.net
.database.cloudapi.de
Период блокировки пула подключений всегда включен.
Период блокировки пула подключений всегда отключен.
Усовершенствования для Always Encrypted
SQLClient представляет два улучшения для Always Encrypted:
Чтобы повысить производительность параметризованных запросов к зашифрованным столбцам базы данных, теперь кэшируются метаданные шифрования для параметров запроса. Если свойство SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled имеет значение true
(значение по умолчанию), если один и тот же запрос вызывается несколько раз, клиент получает метаданные параметров с сервера только один раз.
Записи ключа шифрования столбцов в кэше ключей теперь вытеснимы после настраиваемого интервала времени, устанавливаемого с помощью свойства SqlConnection.ColumnEncryptionKeyCacheTtl.
В .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, эту функцию можно включить, добавив следующую строку в <среду выполнения> раздела 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, используйте один из следующих механизмов конфигурации, чтобы добавить его в список согласованных протоколов.
Свойство TcpTransportSecurity.SslProtocols
Раздел <транспорта> раздела <netTcpBinding>
Раздел <sslStreamSecurity> в рамках <customBinding>
В .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 для приложений WPF, WPF в .NET Framework 4.6.2 обеспечивает адаптацию под каждый монитор. Для получения дополнительной информации о том, как сделать ваше приложение WPF поддерживающим разные DPI на каждом мониторе, см. образцы и руководство разработчика на GitHub.
В предыдущих версиях .NET Framework приложения WPF знают о системном DPI. Другими словами, пользовательский интерфейс приложения масштабируется операционной системой соответствующим образом в зависимости от DPI монитора, на котором отображается приложение.
Для приложений, работающих в .NET Framework 4.6.2, можно отключить изменения DPI на монитор в приложениях WPF, добавив инструкцию конфигурации в раздел среды выполнения <> файла конфигурации приложения следующим образом:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>
В .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 IntelliSense нарушается при перестроении проекта рабочего процесса из Visual Studio. Хотя сборка проекта выполнена успешно, типы рабочих процессов не найдены в конструкторе, а предупреждения IntelliSense для отсутствующих типов рабочих процессов отображаются в окне списка ошибок. .NET Framework 4.6.2 устраняет эту проблему и делает IntelliSense доступным.
приложения workflow версии 1 с отслеживанием рабочих процессов в настоящее время выполняются в режиме FIPS
Компьютеры с включенным режимом соответствия FIPS теперь могут успешно запустить приложение рабочего процесса версии 1 с отслеживанием рабочих процессов. Чтобы включить этот сценарий, необходимо внести следующее изменение в файл app.config:
<add key="microsoft:WorkflowRuntime:FIPSRequired" value="true" />
Если этот сценарий не включен, запуск приложения продолжает создавать исключение с сообщением "Эта реализация не является частью проверенных алгоритмов шифрования fiPS платформы Windows".
Улучшения рабочих процессов при использовании Dynamic Update с Visual Studio Workflow Designer
Конструктор рабочих процессов, конструктор действий FlowChart и другие конструкторы действий рабочих процессов теперь успешно загружают и отображают рабочие процессы, сохраненные после вызова метода DynamicUpdateServices.PrepareForUpdate. В версиях .NET Framework до .NET Framework 4.6.2 загрузка XAML-файла в Visual Studio для рабочего процесса, сохраненного после вызова DynamicUpdateServices.PrepareForUpdate, может привести к следующим проблемам:
Конструктор рабочих процессов не может правильно загрузить XAML-файл (если ViewStateData.Id находится в конце строки).
Конструктор действий блок-схемы или другие конструкторы действий рабочих процессов могут отображать все объекты в их расположениях по умолчанию, а не значения присоединенного свойства.
ClickOnce обновлен для поддержки TLS 1.1 и TLS 1.2 в дополнение к протоколу 1.0, который он уже поддерживает. ClickOnce автоматически определяет, какой протокол является обязательным; Для включения поддержки TLS 1.1 и 1.2 в приложении ClickOnce не требуются дополнительные шаги.
Windows теперь предоставляет возможности для переноса существующих классических приложений Windows, включая приложения WPF и Windows Forms, на универсальную платформу Windows (UWP). Эта технология выступает в качестве моста, позволяя постепенно перенести существующую базу кода в UWP, тем самым приведя приложение ко всем устройствам Windows 10.
Преобразованные классические приложения получают удостоверение приложения, аналогичное удостоверению приложений UWP, что делает API UWP доступными для включения таких функций, как динамические плитки и уведомления. Приложение продолжает работать как раньше и работает в качестве приложения с полным доверием. После преобразования приложения к существующему процессу полного доверия можно добавить процесс контейнера приложения, чтобы обеспечить адаптивный пользовательский интерфейс. При перемещении всех функций в процесс контейнера приложений можно удалить процесс полного доверия, и новое приложение UWP можно сделать доступным для всех устройств Windows 10.
API отладки был расширен в .NET Framework 4.6.2 для проведения дополнительного анализа, когда выбрасывается NullReferenceException, чтобы была возможность определить, какая переменная в одной строке исходного кода null
. Для поддержки этого сценария в неуправляемый API добавлены следующие API-интерфейсы.
Интерфейсы ICorDebugCode4, ICorDebugVariableHomeи ICorDebugVariableHomeEnum обеспечивают доступ к нативным местоположениям управляемых переменных. Это позволяет отладчикам проводить анализ потока кода при возникновении NullReferenceException и анализировать в обратном порядке, чтобы определить управляемую переменную, соответствующую родному местоположению, которое было null
.
Метод ICorDebugType2::GetTypeID предоставляет сопоставление для ICorDebugType с COR_TYPEID, что позволяет отладчику получить COR_TYPEID без экземпляра ICorDebugType. Существующие API на COR_TYPEID затем можно использовать для определения макета класса типа.
.NET Framework 4.6.1 включает новые функции в следующих областях:
Дополнительные сведения о .NET Framework 4.6.1 см. в следующих разделах:
API .NET Framework (на сайте GitHub)
Платформа .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 добавлено следующее:
поддержка Always Encrypted для аппаратных защищенных ключей
ADO.NET теперь поддерживает хранение главных ключей для столбцов Always Encrypted непосредственно в аппаратных модулях безопасности (HSM). Благодаря этой поддержке клиенты могут использовать асимметричные ключи, хранящиеся в HSM, без необходимости разрабатывать собственных поставщиков хранилища главного ключа столбцов и регистрировать их в приложениях.
Клиентам необходимо установить поставщика CSP, предоставленного производителем HSM, или поставщиков хранилища ключей CNG на серверах приложений или клиентских компьютерах, чтобы получить доступ к данным Always Encrypted, защищенным главными ключами столбцов, которые хранятся в HSM.
Улучшено поведение подключения MultiSubnetFailover для AlwaysOn
SqlClient теперь автоматически предоставляет более быстрые подключения к группе доступности AlwaysOn (AG). Он прозрачно определяет, подключается ли приложение к группе доступности AlwaysOn в другой подсети и быстро обнаруживает текущий активный сервер и обеспечивает подключение к серверу. До этого обновления приложению необходимо было задать строку подключения, включая "MultisubnetFailover=true"
, для указания, что оно подключается к группе доступности AlwaysOn. Без задания ключевого слова подключения true
приложение может столкнуться с временем ожидания при подключении к группе доступности AlwaysOn. В этом выпуске приложение не больше MultiSubnetFailovertrue
. Дополнительные сведения о поддержке SqlClient для групп доступности Always On см.: Поддержка SqlClient для высокой доступности и аварийного восстановления.
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.
примеры
В репозитории Microsoft/WPF-Samples GitHub есть несколько примеров WPF. Помогите нам улучшить наши примеры, отправив pull-request или открыв проблему на GitHub.
расширения DirectX
WPF включает пакет NuGet, который предоставляет новые реализации D3DImage, которые упрощают взаимодействие с содержимым DX10 и DX11. Код этого пакета стал общедоступным и доступен на GitHub.
Теперь метод 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.
Профилировщики, использующие функции ReJit API ICorProfiler
для динамического инструментирования, теперь могут изменять некоторые метаданные. Ранее такие средства могут инструментировать IL в любое время, но метаданные могут изменяться только во время загрузки модуля. Так как IL ссылается на метаданные, это ограничивает типы инструментирования, которые можно сделать. Мы подняли некоторые из этих ограничений, добавив метод ICorProfilerInfo7::ApplyMetaData для поддержки подмножества изменений метаданных после загрузки модуля, в частности путем добавления новых AssemblyRef
, TypeRef
, TypeSpec
, MemberRef
, MemberSpec
и UserString
записей. Это изменение делает возможным гораздо более широкий спектр инструментации в режиме реального времени.
Трассировка событий между компьютерами позволяет клиентам профилировать программу на компьютере A и смотреть на данные профилирования с сопоставлением исходного кода на компьютере B. С использованием предыдущих версий .NET Framework пользователь копирует все модули и нативные образы с профилированного компьютера на компьютер анализа, содержащий IL PDB для создания сопоставления исходного кода с нативным кодом. Хотя этот процесс может работать хорошо, если файлы относительно малы, например для телефонных приложений, файлы могут быть очень большими в классических системах и требуют значительного времени для копирования.
С помощью NGen PDB, NGen может создать PDB, содержащий сопоставление IL-to-native без зависимости от IL PDB. В нашем сценарии трассировки событий между компьютерами необходимо скопировать собственный PDB образа, созданный машиной A на компьютер B, и использовать API-интерфейсы доступа к интерфейсу отладки для чтенияto-IL исходного сопоставления PDB IL PDB и собственного сопоставления PDB в собственном образе. Объединение этих двух сопоставлений обеспечивает сопоставление исходного и родного. Так как PDB встроенного образа гораздо меньше, чем все модули и встроенные образы, процесс копирования с компьютера A на компьютер B происходит гораздо быстрее.
В .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 обновления
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 (UWP) Windows 10, использующих 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 (ядро СУБД) и 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 значительно улучшена производительность.
обновления шифрования
API System.Security.Cryptography обновляется для поддержки API шифрования Windows CNG. Предыдущие версии .NET Framework полностью зависели от более ранней версии криптографических API Windows в качестве основы реализации System.Security.Cryptography. У нас были запросы на поддержку API CNG, так как она поддерживает современных алгоритмов шифрования, которые важны для определенных категорий приложений.
.NET Framework 4.6 включает следующие новые усовершенствования для поддержки API шифрования Windows CNG:
Набор методов расширения для сертификатов 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
Полезно использовать согласованный формат для коммутаторов, так как они являются формальным контрактом, предоставляемым библиотекой. Ниже приведены два очевидных формата.
переключение.пространства имен.имя коммутатора
коммутатор.библиотека.имя коммутатора
Изменения в асинхронном шаблоне, основанном на задачах (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, могут использовать новое поведение, добавив следующую строку в раздел среды выполнения <> файла app.config:
<AppContextSwitchOverrides
value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"
/>
Окна WPF с несколькими мониторами с разными настройками 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 КБ на одновременных подключениях:
Значение элемента перечисления System.Net.Sockets.SocketOptionName.
Свойство ServicePointManager.ReusePort.
По умолчанию свойство 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
Приложения универсальной платформы Windows (UWP), написанные на C# или Visual Basic, могут воспользоваться новой технологией, которая компилирует приложения в машинный код, а не IL. Эта технология создает приложения, которые имеют более быстрое время запуска и выполнения. Дополнительные сведения см. в статье Компиляция приложений с помощью .NET Native. Для обзора .NET Native, в котором рассматривается, как он отличается от JIT-компиляции и NGEN, и что это значит для вашего кода, см. .NET Native и компиляция.
Приложения компилируются в машинный код по умолчанию при компиляции с помощью Visual Studio 2015 или более поздней версии. Дополнительные сведения см. в разделе Начало работы с .NET Native.
Для поддержки отладки собственных приложений .NET в API неуправляемой отладки добавлен ряд новых интерфейсов и перечислений. Дополнительные сведения см. в разделе Отладка (справочник по неуправляемым API).
пакеты .NET Framework с открытым кодом
Пакеты .NET Core, такие как неизменяемые коллекции, API SIMD, и сетевые API, такие как те, которые находятся в пространстве имен System.Net.Http, теперь доступны в виде пакетов с открытым исходным кодом на GitHub. Чтобы получить доступ к коду, ознакомьтесь с .NET наGitHub. Дополнительные сведения и способы участия в этих пакетах см. в статье Введение в .NET, домашнюю страницу .NET на сайте GitHub.
Новые 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 профилирования требуют, чтобы зависимые сборки, внедренные профилировщиком, загружались немедленно, а не загружаются после полной инициализации приложения. Это изменение не влияет на пользователей существующих API ICorProfiler
.
Улучшения отладки. Следующие новые неуправляемые 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.
Обновления за апрель 2014 г.:
Visual Studio 2013 Update 2 включает обновления шаблонов переносимой библиотеки классов для поддержки следующих сценариев:
Api среды выполнения Windows можно использовать в переносимых библиотеках, предназначенных для 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 (WINMD-файл) для использования в приложениях Магазина, предназначенных для Windows 8.1 и Windows Phone 8.1.
Вы можете перенацелить библиотеку классов Магазина Windows или Магазина Windows Phone, например переносимую библиотеку классов.
Дополнительные сведения об этих изменениях см. в переносной библиотеке классов .
Набор содержимого .NET Framework теперь включает документацию для .NET Native, которая является технологией предварительной компиляции для создания и развертывания приложений Windows. .NET Native компилирует приложения непосредственно в машинный код, а не на промежуточный язык (IL), чтобы повысить производительность. Дополнительные сведения см. в разделе о компиляции приложений с помощью .NET Native.
Исходный код .NET Framework предоставляет новый опыт просмотра и расширенные функциональные возможности. Теперь вы можете просмотреть исходный код .NET Framework в Интернете, скачать справочные материалы для автономного просмотра и просматривать исходные коды пошагово (включая исправления и обновления) во время отладки. Дополнительные сведения см. в записи блога "Новый вид исходного кода справочника для .NET".
К новым функциям и усовершенствованиям базовых классов в .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 и приложений для Windows Phone. Дополнительные сведения см. в статье Изучение возвращаемых значений вызовов методов.
Редактирование и продолжение выполнения для 64-разрядных приложений. Visual Studio 2013 поддерживает функцию "Изменить и продолжить" для 64-разрядных управляемых приложений для настольных компьютеров, Магазина Windows и Windows Phone. Существующие ограничения остаются в силе для 32-разрядных и 64-разрядных приложений (см. последний раздел статьи поддерживаемых изменений кода (C#).
Отладка с учётом асинхронности. Чтобы упростить отладку асинхронных приложений в Visual Studio 2013, стек вызовов скрывает код инфраструктуры, предоставленный компиляторами для поддержки асинхронного программирования, а также цепочки в логических родительских кадрах, чтобы можно было более четко следовать выполнению логической программы. Окно "Задачи" заменяет окно параллельных задач и отображает задачи, относящиеся к определенной точке останова, а также отображает все другие задачи, которые в настоящее время активны или запланированы в приложении. Вы можете прочитать об этой функции в разделе «Асинхронная отладка» объявления .NET Framework 4.5.1.
Улучшена поддержка исключений для компонентов среды выполнения Windows. В 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 и веб-средствах для Visual Studio 2013.
Возможность уменьшения перезапуска системы путем обнаружения и закрытия приложений .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.
Поддержка версии стандарта IDNA 2008 года для международных доменных имен в приложениях при использовании класса System.Globalization.IdnMapping в Windows 8.
Делегирование сравнения строк операционной системе, реализующей Юникод 6.0, когда платформа .NET Framework используется в Windows 8. При выполнении на других платформах платформа .NET Framework включает собственные данные сравнения строк, реализующие Юникод 5.x. См. класс String и раздел "Примечания" класса SortVersion.
Возможность вычислить хэш-коды для строк на основе домена приложения. См. <UseRandomizedStringHashAlgorithm> элемент.
Поддержка рефлексии типов разделена между классами Type и TypeInfo. См. Reflection в .NET Framework для приложений Windows Store.
В .NET Framework 4.5 управляемая платформа расширяемости (MEF) предоставляет следующие новые возможности:
Поддержка универсальных типов.
Модель программирования на основе соглашений, которая позволяет создавать части на основе соглашений об именовании, а не атрибутов.
Несколько областей.
Подмножество MEF, которое можно использовать при создании приложений Магазина Windows 8.x. Это подмножество доступно как скачиваемый пакет из галереи NuGet. Чтобы установить пакет, откройте проект в Visual Studio, выберите Управление пакетами NuGet в меню Project и найдите пакет 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, асинхронные обработчики, улучшения производительности и многие другие функции. Дополнительные сведения см. в следующих ресурсах:
заметки о выпуске ASP.NET и веб-инструментов для Visual Studio 2013
Платформа .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.
В .NET Framework 4.5 Windows Presentation Foundation (WPF) содержит изменения и улучшения в следующих областях:
Новый элемент управления Ribbon, который позволяет реализовать пользовательский интерфейс ленты, на котором размещена панель быстрого доступа, меню приложения и вкладки.
Новый интерфейс INotifyDataErrorInfo, который поддерживает синхронную и асинхронную проверку данных.
Новые возможности для классов VirtualizingPanel и Dispatcher.
Улучшена производительность при отображении больших наборов сгруппированных данных и доступе к коллекциям в потоках, отличных от пользовательского интерфейса.
Привязка данных к статическим свойствам, привязка данных к пользовательским типам, реализующим интерфейс ICustomTypeProvider, и получение сведений о привязке данных из выражения привязки.
Изменение положения данных по мере изменения значений (динамическое формирование).
Возможность проверить, отключен ли контекст данных для контейнера элементов.
Возможность задать время, которое должно пройти между изменениями свойств и обновлениями источника данных.
Улучшена поддержка реализации слабых шаблонов событий. Кроме того, события теперь могут принимать расширения разметки.
В .NET Framework 4.5 добавлены следующие функции, чтобы упростить запись и обслуживание приложений Windows Communication Foundation (WCF):
Упрощение созданных файлов конфигурации.
Поддержка разработки, ориентированной на контракт.
Возможность настроить режим совместимости ASP.NET проще.
Изменения значений свойств транспорта по умолчанию, чтобы снизить необходимость их ручной настройки.
Обновляет класс XmlDictionaryReaderQuotas, чтобы снизить вероятность необходимости вручную настроить квоты для чтения словарей XML.
Проверка файлов конфигурации WCF в Visual Studio в процессе сборки, поэтому перед запуском приложения можно обнаружить ошибки конфигурации.
Новая асинхронная поддержка потоковой передачи.
Новое сопоставление протокола HTTPS для упрощения процесса предоставления конечной точки по протоколу HTTPS с использованием служб IIS.
Возможность создавать метаданные в одном документе WSDL путем добавления ?singleWSDL
в URL-адрес службы.
Поддержка WebSockets для обеспечения двунаправленной связи через порты 80 и 443 с характеристиками производительности, аналогичными используемым в транспортировке по TCP.
Поддержка настройки служб в коде.
Подсказки редактора XML.
ChannelFactory поддержка кэширования.
Поддержка сжатия для двоичного кодировщика.
Поддержка транспорта UDP, позволяющего разработчикам писать службы, использующие обмен сообщениями "fire and forget". Клиент отправляет сообщение в службу и не ожидает ответа от службы.
Возможность поддерживать несколько способов аутентификации на одном конечном узле WCF при использовании протокола HTTP и транспортной безопасности.
Поддержка служб WCF, использующих международные доменные имена (IDN).
Дополнительные сведения см. в статье Новые возможности Windows Communication Foundation.
В .NET Framework 4.5 в Windows Workflow Foundation (WF) добавлены несколько новых функций, в том числе:
Рабочие процессы компьютера состояния, которые впервые появились в составе .NET Framework 4.0.1 (.NET Framework 4 с обновлением 1). Это обновление включало несколько новых классов и действий, которые позволили разработчикам создавать рабочие процессы компьютера состояния. Эти классы и действия были обновлены для .NET Framework 4.5, чтобы включить:
Возможность задавать точки останова для состояний.
Возможность копирования и вставки переходов в конструктор рабочих процессов.
Поддержка инструментов разработки для создания переходов с общим триггером.
Действия по созданию рабочих процессов компьютера состояния, включая StateMachine, Stateи Transition.
Расширенные функции конструктора рабочих процессов, такие как следующие:
Расширенные возможности поиска рабочих процессов в Visual Studio, включая быстрый поиск и поиск в файлах.
Возможность автоматического создания действия Sequence при добавлении второго дочернего действия в действие-контейнер и включения обоих действий в действие Sequence.
Поддержка сдвига, которая позволяет изменять видимую часть рабочего процесса без использования полос прокрутки.
Новое представление структуры документа
Возможность добавлять заметки в действия.
Возможность задавать и использовать делегаты действий с помощью конструктора рабочих процессов.
Автоматическое подключение и автоматическая вставка для действий и переходов в рабочих процессах государственного компьютера и блок-схемы.
Хранение сведений о состоянии представления для рабочего процесса в одном элементе в XAML-файле, чтобы можно было легко найти и изменить сведения о состоянии представления.
Действие контейнера NoPersistScope, чтобы предотвратить сохранение дочерних действий.
Поддержка выражений C#:
Проекты рабочих процессов, использующие Visual Basic, будут использовать выражения Visual Basic, а проекты рабочих процессов C# будут использовать выражения C#.
Проекты рабочих процессов C#, созданные в Visual Studio 2010 и имеющие выражения Visual Basic, совместимы с проектами рабочих процессов C#, используюющими выражения C#.
Улучшения управления версиями:
Новый класс WorkflowIdentity, который обеспечивает сопоставление между сохраненным экземпляром рабочего процесса и его определением рабочего процесса.
Параллельное выполнение нескольких версий рабочих процессов в одном узле, включая WorkflowServiceHost.
В динамическом обновлении возможность изменения определения сохраняемого экземпляра рабочего процесса.
Разработка сервисов рабочих процессов с приоритетом на контракт, обеспечивающая поддержку автоматического создания действий, соответствующих существующему контракту сервиса.
Дополнительные сведения см. в статье Новые возможности Windows Workflow Foundation.
Приложения Магазина 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) для целевых объектов. Доступные типы и члены проекта автоматически ограничиваются общими типами и членами на этих платформах. Дополнительные сведения см. в переносимой библиотеке классов.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Обучение
Модуль
Реализация операций HTTP в ASP.NET Razor Pages - Training
Реализация операций HTTP в ASP.NET Razor Pages