Новые возможности .NET FrameworkWhat's new in .NET Framework

В этой статье кратко рассматриваются основные новые возможности и усовершенствования в следующих версиях .NET Framework:This article summarizes key new features and improvements in the following versions of the .NET Framework:

Данная статья не содержит исчерпывающей информации обо всех новых возможностях и может быть изменена.This article does not provide comprehensive information about each new feature and is subject to change. Общие сведения о .NET Framework см. в разделе Начало работы с .NET Framework.For general information about the .NET Framework, see Getting Started. Поддерживаемые платформы см. в разделе Требования к системе.For supported platforms, see System Requirements. Ссылки для загрузки и инструкции по установке см. в разделе Руководство по установке.For download links and installation instructions, see Installation Guide.

Примечание

Команда .NET Framework также выпускает компоненты в виде внештатных выпусков совместно с NuGet для расширения поддержки и введения новых возможностей (таких как неизменяемые коллекции и векторные типы с поддержкой SIMD).The .NET Framework team also releases features out of band with NuGet to expand platform support and to introduce new functionality, such as immutable collections and SIMD-enabled vector types. Дополнительные сведения см. в разделах Дополнительные библиотеки классов и интерфейсы API и .NET Framework и внештатные выпуски.For more information, see Additional Class Libraries and APIs and The .NET Framework and Out-of-Band Releases. См. полный список пакетов NuGet для .NET Framework.See a complete list of NuGet packages for the .NET Framework.

Знакомство с платформой .NET Framework 4.8Introducing .NET Framework 4.8

Версия .NET Framework 4.8 основана на предыдущих выпусках .NET Framework 4.x. Она включает много исправлений и несколько новых функций, а также характеризуется очень стабильной работой..NET Framework 4.8 builds on previous versions of the .NET Framework 4.x by adding many new fixes and several new features while remaining a very stable product.

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

Ссылки для скачивания .NET Framework 4.8:You can download .NET Framework 4.8 from the following locations:

.NET Framework 4.8 можно установить на платформах Windows 10, Windows 8.1 и Windows 7 с пакетом обновления 1 (SP1), а также на соответствующих серверных платформах, начиная с Windows Server 2008 R2 с пакетом обновления 1 (SP1)..NET Framework 4.8 can be installed on Windows 10, Windows 8.1, Windows 7 SP1, and the corresponding server platforms starting with Windows Server 2008 R2 SP1. .NET Framework 4.8 можно установить с помощью веб-установщика или автономного установщика.You can install .NET Framework 4.8 by using either the web installer or the offline installer. Для большинства пользователей рекомендуется использовать веб-установщик.The recommended way for most users is to use the web installer.

Вы можете использовать .NET Framework 4.8 как целевую платформу в Visual Studio 2012 (или более поздних версиях), установив .NET Framework 4.8 Developer Pack.You can target .NET Framework 4.8 in Visual Studio 2012 or later by installing the .NET Framework 4.8 Developer Pack.

Новые возможности .NET Framework 4.8What's new in .NET Framework 4.8

.NET Framework 4.8 включает новые функции в следующих областях:.NET Framework 4.8 introduces new features in the following areas:

Основной акцент в .NET Framework 4.8, как и прежде, сделан на улучшении специальных возможностей, что позволяет приложению предоставлять соответствующие функции целевой аудитории.Improved accessibility, which allows an application to provide an appropriate experience for users of Assistive Technology, continues to be a major focus of .NET Framework 4.8. См. подробнее об улучшениях специальных возможностей в .NET Framework 4.8.For information on accessibility improvements in .NET Framework 4.8, see What's new in accessibility in the .NET Framework.

базовых классов;Base classes

Ослабление влияния FIPS на шифрование.Reduced FIPS impact on Cryptography. В предыдущих версиях .NET Framework управляемые классы поставщиков служб шифрования, такие как SHA256Managed, выдавали исключение CryptographicException во время настройки системных библиотек шифрования в режиме FIPS.In previous versions of the .NET Framework, managed cryptographic provider classes such as SHA256Managed throw a CryptographicException when the system cryptographic libraries are configured in “FIPS mode”. Это происходит из-за того, что, в отличие от системных библиотек шифрования, сертификация FIPS 140-2 не выполнялась для управляемых версий классов поставщиков служб шифрования.These exceptions are thrown because the managed versions of the cryptographic provider classes, unlike the system cryptographic libraries, have not undergone FIPS (Federal Information Processing Standards) 140-2 certification. Некоторые разработчики используют виртуальные машины разработки в режиме FIPS, поэтому такие исключения обычно выдаются в рабочих системах.Because few developers have their development machines in FIPS mode, the exceptions are commonly thrown in production systems.

По умолчанию в приложениях, работающих с .NET Framework 4.8, следующие управляемые криптографические классы больше не вызывают исключение CryptographicException в этом случае:By default in applications that target .NET Framework 4.8, the following managed cryptography classes no longer throw a CryptographicException in this case:

Вместо этого такие классы перенацеливают криптографические операции на системную библиотеку шифрования.Instead, these classes redirect cryptographic operations to a system cryptography library. Это изменение эффективно устраняет возможное заблуждение относительно различий между средами разработки и рабочими средами, применяя к собственным и управляемым компонентам одну и ту же политику шифрования.This change effectively removes a potentially confusing difference between developer environments and production environments and makes native components and managed components operate under the same cryptographic policy. Прежнее поведение приложений, работа которых зависит от этих исключений, можно восстановить, установив для параметра AppContext Switch.System.Security.Cryptography.UseLegacyFipsThrow значение true.Applications that depend on these exceptions can restore the previous behavior by setting the AppContext switch Switch.System.Security.Cryptography.UseLegacyFipsThrow to true. См. подробнее об управляемых криптографических классах, которые не вызывают исключение CryptographyException в режиме FIPS.For more information, see Managed cryptography classes do not throw a CryptographyException in FIPS mode.

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

Начиная с .NET Framework 4.5, сборка clrcompression.dll использует ZLib — собственную внешнюю библиотеку для сжатия данных, предоставляя реализацию для алгоритма deflate.Starting with .NET Framework 4.5, the clrcompression.dll assembly uses ZLib, a native external library for data compression, in order to provide an implementation for the deflate algorithm. В .NET Framework 4.8 сборка clrcompression.dll обновлена для поддержки ZLib версии 1.2.11 c несколькими ключевыми улучшениями и исправлениями.The .NET Framework 4.8, clrcompression.dll is updated to use ZLib Version 1.2.11, which includes several key improvements and fixes.

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)

Знакомство с ServiceHealthBehaviorIntroduction of ServiceHealthBehavior

Конечные точки работоспособности широко используются средствами оркестрации для управления службами на основе состояния их работоспособности.Health endpoints are widely used by orchestration tools to manage services based on their health status. Проверки работоспособности также могут использоваться средствами мониторинга для отслеживания и создания уведомлений о доступности и производительности службы.Health checks can also be used by monitoring tools to track and provide notifications about the availability and performance of a service.

ServiceHealthBehavior — это поведение службы WCF, которое расширяет IServiceBehavior.ServiceHealthBehavior is a WCF service behavior that extends IServiceBehavior. При добавлении в коллекцию ServiceDescription.Behaviors поведение службы отвечает за следующие действия:When added to the ServiceDescription.Behaviors collection, a service behavior does the following:

  • Возвращает состояние работоспособности службы с кодами откликов HTTP.Returns service health status with HTTP response codes. Эти коды можно указать в строке запроса для проверки работоспособности HTTP/GET.You can specify in a query string the HTTP status code for a HTTP/GET health probe request.

  • Публикует сведения о работоспособности службы.Publishes information about service health. Это сведения о службе, включая данные о состоянии службы и емкости, а также счетчики регулирования, можно отобразить с помощью запроса HTTP/GET в строке запроса ?health.Service-specific details, including service state, throttle counts, and capacity can be displayed by using an HTTP/GET request with the ?health query string. Простота доступа к такой информации необходима при устранении неполадок с неправильным поведением службы WCF.Ease of access to such information is important when troubleshooting a misbehaving WCF service.

Есть два способа, чтобы предоставить конечную точку работоспособности и опубликовать сведения о работоспособности службы WCF:There are two ways to expose the health endpoint and publish WCF service health information:

  • С помощью кода.Through code. Пример:For example:

    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)
    
  • С помощью файла конфигурации.By using a configuration file. Пример:For example:

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

Состояние работоспособности службы можно запросить, используя такие параметры запроса, как OnServiceFailure, OnDispatcherFailure, OnListenerFailure, OnThrottlePercentExceeded. При этом код отклика HTTP можно указать для каждого параметра запроса.A service's health status can be queried by using query parameters such as OnServiceFailure, OnDispatcherFailure, OnListenerFailure, OnThrottlePercentExceeded), and an HTTP response code can be specified for each query parameter. Если для параметра запроса не указан код отклика HTTP, по умолчанию используется код HTTP 503.If the HTTP response code is omitted for a query parameter, a 503 HTTP response code is used by default. Пример:For example:

  • OnServiceFailure: https://contoso:81/Service1?health&OnServiceFailure=450OnServiceFailure: https://contoso:81/Service1?health&OnServiceFailure=450

    Код состояния отклика HTTP 450 возвращается, если значение ServiceHost.State больше чем CommunicationState.Opened.A 450 HTTP response status code is returned when ServiceHost.State is greater than CommunicationState.Opened. Параметры запроса и примеры:Query parameters and examples:

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

    Код состояния отклика HTTP 455 возвращается, если состояние любого из диспетчеров каналов больше чем CommunicationState.Opened.A 455 HTTP response status code is returned when the state of any of the channel dispatchers is greater than CommunicationState.Opened.

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

    Код состояния отклика HTTP 465 возвращается, если состояние любого из прослушивателей каналов больше чем CommunicationState.Opened.A 465 HTTP response status code is returned when the state of any of the channel listeners is greater than CommunicationState.Opened.

  • OnThrottlePercentExceeded: https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500OnThrottlePercentExceeded: https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500

    Указывает процент (1–100), который активирует отклик и соответствующий код отклика HTTP (200–599).Specifies the percentage {1 – 100} that triggers the response and its HTTP response code {200 – 599}. В этом примере:In this example:

    • Если процент больше чем 95, возвращается код отклика HTTP 500.If the percentage is greater than 95, a 500 HTTP response code is returned.

    • Если это значение находится в диапазоне между 70 и 95, возвращается код отклика 350.If the percentage or between 70 and 95, 350 is returned.

    • В противном случае возвращается код отклика 200.Otherwise, 200 is returned.

Состояние работоспособности службы может отображаться в формате HTML (если указана такая строка запроса, как https://contoso:81/Service1?health) или в формате XML (если указана такая строка запроса, как https://contoso:81/Service1?health&Xml).The service health status can be displayed either in HTML by specifying a query string like https://contoso:81/Service1?health or in XML by specifying a query string like https://contoso:81/Service1?health&Xml. Такая строка запроса, как https://contoso:81/Service1?health&NoContent, возвращает пустую HTML-страницу.A query string like https://contoso:81/Service1?health&NoContent returns an empty HTML page.

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

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

В .NET Framework 4.8 WPF добавлена поддержка DPI для каждого монитора версии 2 и масштабирование DPI в смешанном режиме.In .NET Framework 4.8, WPF adds support for Per-Monitor V2 DPI Awareness and Mixed-Mode DPI scaling. См. подробнее о разработке классических приложений с поддержкой высокого разрешения в Windows.See High DPI Desktop Application Development on Windows for additional information about high DPI development.

В .NET Framework 4.8 улучшена поддержка взаимодействия между размещенными HWND и Windows Forms в приложениях WPF с поддержкой высокого разрешения на платформах, которые поддерживают масштабирование DPI в смешанном режиме (начиная с обновления Windows 10 за апрель 2018 г.)..NET Framework 4.8 improves support for hosted HWNDs and Windows Forms interoperation in High-DPI WPF applications on platforms that support Mixed-Mode DPI scaling (starting with Windows 10 April 2018 Update). Элементы управления размещенных HWND или Windows Forms, создаваемые в качестве окон с масштабированием DPI в смешанном режиме путем вызова SetThreadDpiHostingBehavior и SetThreadDpiAwarenessContext, могут размещаться в приложении WPF с поддержкой DPI для каждого монитора версии 2 с правильными размером и масштабом.When hosted HWNDs or Windows Forms controls are created as Mixed-Mode DPI-scaled windows by calling SetThreadDpiHostingBehavior and SetThreadDpiAwarenessContext, they can be hosted in a Per-Monitor V2 WPF application and are sized and scaled appropriately. Такое размещенное содержимое не отображается в собственном высоком разрешении. Вместо этого операционная система масштабирует размещенное содержимое до соответствующего размера.Such hosted content is not rendered at the native DPI; instead, the operating system scales the hosted content to the appropriate size. Включение режима поддержки DPI для каждого монитора версии 2 также позволяет размещать элементы управления WPF (родительские) в собственном окне в приложении с поддержкой высокого разрешения.The support for Per-Monitor v2 DPI awareness mode also allows WPF controls to be hosted (i.e., parented) in a native window in a high-DPI application.

Чтобы включить поддержку масштабирования высокого разрешения в смешанном режиме, можно настроить следующие параметры AppContext в файле конфигурации приложения:To enable support for Mixed-Mode High DPI scaling, you can set the following AppContext switches the application configuration file:

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

Среда CLRCommon language runtime

Среда выполнения в .NET Framework 4.8 включает следующие новые функции и улучшения:The runtime in .NET Framework 4.8 includes the following changes and improvements:

Улучшения JIT-компилятора.Improvements to the JIT compiler. Компилятор Just-in-time (JIT) в .NET Framework 4.8 основан на JIT-компиляторе .NET Core 2.1.The Just-in-time (JIT) compiler in .NET Framework 4.8 is based on the JIT compiler in .NET Core 2.1. Многие оптимизации и все исправления, внесенные в JIT-компилятор .NET Core 2.1, включены в JIT-компилятор .NET Framework 4.8.Many of the optimizations and all of the bug fixes made to the .NET Core 2.1 JIT compiler are included in the .NET Framework 4.8 JIT compiler.

Улучшения NGEN.NGEN improvements. В среде выполнения улучшено управление памятью для образов генератора образов в машинном коде, чтобы данные, полученные из таких образов, не были резидентными.The runtime has improved its memory management for Native Image Generator (NGEN) images so that data mapped from NGEN images are not memory-resident. Это сокращает контактную зону для атак с попытками выполнить произвольный код путем изменения соответствующей памяти.This reduces the surface area available to attacks that attempt to execute arbitrary code by modifying memory that will be executed.

Сканирование на наличие вредоносных программ для всех сборок.Antimalware scanning for all assemblies. В предыдущих версиях .NET Framework среда выполнения просматривает все сборки, загруженные с диска, с помощью Защитника Windows или стороннего антивредоносного ПО.In previous versions of the .NET Framework, the runtime scans all assemblies loaded from disk using either Windows Defender or third-party antimalware software. При этом сборки, загруженные из других источников, например с помощью метода Assembly.Load(Byte[]), не просматриваются, следовательно, они могут содержать не обнаруженное вредоносное ПО.However, assemblies loaded from other sources, such as by the Assembly.Load(Byte[]) method, are not scanned and can potentially contain undetected malware. Начиная с .NET Framework 4.8, при выполнении в Windows 10 среда выполнения запускает сканирование с помощью решений для защиты от вредоносных программ, которые реализуют интерфейс сканирования антивредоносного ПО (AMSI).Starting with .NET Framework 4.8 running on Windows 10, the runtime triggers a scan by antimalware solutions that implement the Antimalware Scan Interface (AMSI).

Новые возможности .NET Framework 4.7.2What's new in .NET Framework 4.7.2

.NET Framework 4.7.2 включает новые функции в следующих областях:.NET Framework 4.7.2 includes new features in the following areas:

Основной акцент в .NET Framework 4.7.2, как и прежде, сделан на улучшении специальных возможностей, что позволяет приложению предоставлять соответствующие функции целевой аудитории.A continuing focus in .NET Framework 4.7.2 is improved accessibility, which allows an application to provide an appropriate experience for users of Assistive Technology. См. подробнее об улучшениях специальных возможностей в .NET Framework 4.7.2.For information on accessibility improvements in .NET Framework 4.7.2, see What's new in accessibility in the .NET Framework.

базовых классов;Base classes

В .NET Framework 4.7.2 значительно усовершенствовано шифрование, улучшена поддержка распаковки ZIP-архивов и включена дополнительная коллекция API..NET Framework 4.7.2 features a large number of cryptographic enhancements, better decompression support for ZIP archives, and additional collection APIs.

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

С помощью методов DSA.Create(DSAParameters) и RSA.Create(RSAParameters) вы можете указывать параметры ключа при создании экземпляра ключа DSA или RSA.The DSA.Create(DSAParameters) and RSA.Create(RSAParameters) methods let you supply key parameters when instantiating a new DSA or RSA key. Они позволяют заменить код, подобный этому:They allow you to replace code like the following:

// 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

на код, подобный этому:with code like this:

// 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 с указанным размером.The DSA.Create(Int32) and RSA.Create(Int32) methods let you generate new DSA or RSA keys with a specific key size. Пример:For example:

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 constructors accept a hash algorithm name

Класс Rfc2898DeriveBytes содержит три новых конструктора с параметром HashAlgorithmName, который определяет алгоритм HMAC для использования при создании производных ключей.The Rfc2898DeriveBytes class has three new constructors with a HashAlgorithmName parameter that identifies the HMAC algorithm to use when deriving keys. Вместо SHA-1 разработчикам следует использовать HMAC на основе SHA-2, например SHA-256, как показано в следующем примере:Instead of using SHA-1, developers should use a SHA-2-based HMAC like SHA-256, as shown in the following example:

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

Поддержка временных ключейSupport for ephemeral keys

При импорте PFX-файла можно загрузить закрытые ключи непосредственно из памяти, минуя жесткий диск.PFX import can optionally load private keys directly from memory, bypassing the hard drive. Если в конструкторе X509Certificate2 или в одной из перегрузок метода X509Certificate2.Import указан новый флаг X509KeyStorageFlags.EphemeralKeySet, закрытые ключи будут загружены в качестве временных ключей. When the new X509KeyStorageFlags.EphemeralKeySet flag is specified in an X509Certificate2 constructor or one of the overloads of the X509Certificate2.Import method, the private keys will be loaded as ephemeral keys. Благодаря этому ключи невидимы на диске.This prevents the keys from being visible on the disk. Но:However:

  • поскольку ключи не сохраняются на диске, сертификаты, загруженные с этим флагом, не являются подходящими кандидатами для добавления в X509Store.Since the keys are not persisted to disk, certificates loaded with this flag are not good candidates to add to an X509Store.

  • Ключи, загруженные таким образом, почти всегда загружаются через Windows CNG.Keys loaded in this manner are almost always loaded via Windows CNG. Поэтому вызывающие объекты должны получить закрытый ключ путем вызова методов расширения, таких как cert.GetRSAPrivateKey().Therefore, callers must access the private key by calling extension methods, such as cert.GetRSAPrivateKey(). Свойство X509Certificate2.PrivateKey не работает.The X509Certificate2.PrivateKey property does not function.

  • Поскольку свойство X509Certificate2.PrivateKey из прежних версий не работает с сертификатами, разработчики должны выполнить тщательное тестирование перед переключением на временные ключи.Since the legacy X509Certificate2.PrivateKey property does not work with certificates, developers should perform rigorous testing before switching to ephemeral keys.

Программное создание запросов подписи сертификата PKCS#10 и сертификатов открытого ключа X.509Programmatic creation of PKCS#10 certification signing requests and X.509 public key certificates

Начиная с версии .NET Framework 4.7.2, рабочие нагрузки могут создавать запросы подписи сертификата (CSR), чтобы запросы на сертификат можно было создавать в существующих средствах.Starting with .NET Framework 4.7.2, workloads can generate certificate signing requests (CSRs), which allows certificate request generation to be staged into existing tooling. Это бывает удобно при тестировании.This is frequently useful in test scenarios.

Дополнительные сведения и примеры кода см. в разделе "Программное создание запросов подписи сертификата PKCS#10 и сертификатов открытого ключа X.509" в блоге .NET.For more information and code examples, see "Programmatic creation of PKCS#10 certification signing requests and X.509 public key certificates" in the .NET Blog.

Новые элементы SignerInfoNew SignerInfo members

Начиная с .NET Framework 4.7.2, класс SignerInfo предоставляет дополнительные сведения о подписи.Starting with .NET Framework 4.7.2, the SignerInfo class exposes more information about the signature. Вы можете извлечь значение свойства System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm, чтобы определить алгоритм подписи, который использовался подписывающим объектом.You can retrieve the value of the System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm property to determine the signature algorithm used by the signer. Вы можете вызвать SignerInfo.GetSignature, чтобы получить копию криптографической подписи для этого подписывающего объекта.SignerInfo.GetSignature can be called to get a copy of the cryptographic signature for this signer.

Упакованный поток остается открытым после удаления CryptoStreamLeaving a wrapped stream open after CryptoStream is disposed

Начиная с .NET Framework 4.7.2, класс CryptoStream имеет дополнительный конструктор, благодаря которому Dispose не закрывает упакованный поток.Starting with .NET Framework 4.7.2, the CryptoStream class has an additional constructor that allows Dispose to not close the wrapped stream. Чтобы оставить упакованный поток открытым после удаления экземпляра CryptoStream, вызовите новый конструктор CryptoStream следующим образом: To leave the wrapped stream open after the CryptoStream instance is disposed, call the new CryptoStream constructor as follows:

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

Изменения распаковки в DeflateStreamDecompression changes in DeflateStream

Начиная с .NET Framework 4.7.2, реализация операций распаковки в классе DeflateStream была изменена и теперь использует собственные API Windows по умолчанию.Starting with .NET Framework 4.7.2, the implementation of decompression operations in the DeflateStream class has changed to use native Windows APIs by default. Как правило, это приводит к значительному повышению производительности.Typically, this results in a substantial performance improvement.

Поддержка распаковки с помощью API Windows включена по умолчанию для приложений, нацеленных на .NET Framework 4.7.2.Support for decompression by using Windows APIs is enabled by default for applications that target .NET Framework 4.7.2. Для приложений, которые предназначены для более ранних версий .NET Framework, но выполняются в .NET Framework 4.7.2, новое поведение можно активировать отдельно, добавив следующий переключатель AppContext в файл конфигурации приложений:Applications that target earlier versions of .NET Framework but are running under .NET Framework 4.7.2 can opt into this behavior by adding the following AppContext switch to the application configuration file:

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

Дополнительные коллекции APIAdditional collection APIs

В .NET Framework 4.7.2 добавлено несколько новых API для типов SortedSet<T> и HashSet<T>..NET Framework 4.7.2 adds a number of new APIs to the SortedSet<T> and HashSet<T> types. Сюда входит следующее.These include:

Класс ConcurrentDictionary<TKey,TValue> включает новые перегрузки методов AddOrUpdate и GetOrAdd, чтобы извлечь значение из словаря или добавить его, если оно не найдено, а также добавить значение в словарь или обновить его, если оно уже существует.The ConcurrentDictionary<TKey,TValue> class includes new overloads of the AddOrUpdate and GetOrAdd methods to retrieve a value from the dictionary or to add it if it is not found, and to add a value to the dictionary or to update it if it already exists.

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

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

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

ASP.NETASP.NET

Поддержка внедрения зависимостей в веб-формахSupport for dependency injection in Web Forms

Внедрение зависимостей (DI) разрывает связь объектов и их зависимостей, чтобы код объекта не пришлось менять только потому, что изменилась зависимость.Dependency injection (DI) decouples objects and their dependencies so that an object's code no longer needs to be changed just because a dependency has changed. При разработке приложений ASP.NET, предназначенных для использования с .NET Framework 4.7.2, вы можете:When developing ASP.NET applications that target .NET Framework 4.7.2, you can:

Поддержка файлов cookie SameSiteSupport for same-site cookies

SameSite запрещает браузеру отправлять файл cookie вместе с межсайтовым запросом.SameSite prevents a browser from sending a cookie along with a cross-site request. В .NET Framework 4.7.2 добавлено свойство HttpCookie.SameSite, значение которого является членом перечисления System.Web.SameSiteMode..NET Framework 4.7.2 adds a HttpCookie.SameSite property whose value is a System.Web.SameSiteMode enumeration member. Если его значение равно SameSiteMode.Strict или SameSiteMode.Lax, ASP.NET добавляет атрибут SameSite в заголовок set-cookie.If its value is SameSiteMode.Strict or SameSiteMode.Lax, ASP.NET adds the SameSite attribute to the set-cookie header. Поддержка SameSite действует для объектов HttpCookie, а также для файлов cookie FormsAuthentication и System.Web.SessionState.SameSite support applies to HttpCookie objects, as well as to FormsAuthentication and System.Web.SessionState cookies.

Вы можете задать SameSite для объекта HttpCookie следующим образом:You can set SameSite for an HttpCookie object as follows:

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:You can also configure SameSite cookies at the application level by modifying the web.config file:

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

Вы можете добавить SameSite для файлов cookie FormsAuthentication и System.Web.SessionState, изменив файл веб-конфигурации:You can add SameSite for FormsAuthentication and System.Web.SessionState cookies by modifying the web config file:

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

СетиNetworking

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

В .NET Framework 4.7.1 добавлены восемь свойств класса System.Net.Http.HttpClientHandler..NET Framework 4.7.1 added eight properties to the System.Net.Http.HttpClientHandler class. Но два из них вызывали исключение PlatformNotSupportedException.However, two threw a PlatformNotSupportedException. Платформа .NET Framework 4.7.2 теперь предоставляет реализацию этих свойств..NET Framework 4.7.2 now provides an implementation for these properties. Это следующие свойства:The properties are:

SQLClientSQLClient

Поддержка универсальной и многофакторной проверки подлинности Azure Active DirectorySupport for Azure Active Directory Universal Authentication and Multi-Factor authentication

В соответствии с более строгими требованиями к безопасности и соблюдению норм многим клиентам приходится использовать многофакторную проверку подлинности (MFA).Growing compliance and security demands require that many customers use multi-factor authentication (MFA). Кроме того, в настоящее время не рекомендуется включать пароли пользователей непосредственно в строки подключения.In addition, current best practices discourage including user passwords directly in connection strings. В связи с этими изменениями в .NET Framework 4.7.2 строки подключения SQLClient теперь имеют новое значение Active Directory Interactive для существующего ключевого слова "Проверка подлинности", чтобы обеспечить MFA и аутентификацию Azure AD.To support these changes, .NET Framework 4.7.2 extends SQLClient connection strings by adding a new value, "Active Directory Interactive", for the existing "Authentication" keyword to support MFA and Azure AD Authentication. Новый интерактивный метод поддерживает собственных и федеративных пользователей Azure AD, а также гостевых пользователей Azure AD.The new interactive method supports native and federated Azure AD users as well as Azure AD guest users. При использовании этого метода многофакторная проверка подлинности, требуемая Azure AD, поддерживается для баз данных SQL.When this method is used, the MFA authentication imposed by Azure AD is supported for SQL databases. Кроме того, процесс проверки подлинности запрашивает у пользователя пароль в соответствии с рекомендациями по обеспечению безопасности.In addition, the authentication process requests a user password to adhere to security best practices.

В предыдущих версиях платформы .NET Framework подключение SQL поддерживало только параметры SqlAuthenticationMethod.ActiveDirectoryPassword и SqlAuthenticationMethod.ActiveDirectoryIntegrated.In previous versions of the .NET Framework, SQL connectivity supported only the SqlAuthenticationMethod.ActiveDirectoryPassword and SqlAuthenticationMethod.ActiveDirectoryIntegrated options. Оба параметра входят в неинтерактивный протокол ADAL, который не поддерживает многофакторную проверку подлинности.Both of these are part of the non-interactive ADAL protocol, which does not support MFA. С новым параметром SqlAuthenticationMethod.ActiveDirectoryInteractive подключение SQL поддерживает многофакторную проверку подлинности, а также существующие методы проверки подлинности (пароль и встроенная проверка подлинности), что позволяет пользователям вводить пароли в интерактивном режиме без их сохранения в строке подключения.With the new SqlAuthenticationMethod.ActiveDirectoryInteractive option, SQL connectivity supports MFA as well as existing authentication methods (password and integrated authentication), which allows users to enter user passwords interactively without persisting passwords in the connection string.

Дополнительные сведения и пример см. в разделе "Поддержка универсальной и многофакторной проверки подлинности SQL — Azure AD" в блоге о .NET.For more information and an example, see "SQL -- Azure AD Universal and Multi-factor Authentication Support" in the .NET Blog.

Поддержка Always Encrypted версии 2Support for Always Encrypted version 2

В NET Framework 4.7.2 добавлена поддержка Always Encrypted на основе анклава.NET Framework 4.7.2 adds supports for enclave-based Always Encrypted. Исходная версия Always Encrypted — это технология шифрования на стороне клиента, в рамках которой ключи шифрования никогда не покидали клиента.The original version of Always Encrypted is a client-side encryption technology in which encryption keys never leave the client. В Always Encrypted на основе анклава клиент может при необходимости отправлять ключи шифрования в безопасный анклав, который является защищенным вычислительным объектом и может считаться частью SQL Server, но код SQL Server не может его изменить.In enclave-based Always Encrypted, the client can optionally send the encryption keys to a secure enclave, which is a secure computational entity that can be considered part of SQL Server but that SQL Server code cannot tamper with. Чтобы обеспечить поддержку Always Encrypted на основе анклава, в .NET Framework 4.7.2 добавлены следующие типы и члены для пространства имен System.Data.SqlClient:To support enclave-based Always Encrypted, .NET Framework 4.7.2 adds the following types and members to the System.Data.SqlClient namespace:

Файл конфигурации приложения указывает конкретную реализацию абстрактного класса System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider, который предоставляет функциональные возможности для поставщика анклава.The application configuration file then specifies a concrete implementation of the abstract System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider class that provides the functionality for the enclave provider. Пример:For example:

<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 на основе анклава:The basic flow of enclave-based Always Encrypted is:

  1. Пользователь создает подключение AlwaysEncrypted к SQL Server с поддержкой Always Encrypted на основе анклава.The user creates an AlwaysEncrypted connection to SQL Server that supported enclave-based Always Encrypted. Драйвер обращается в службу аттестации, чтобы обеспечить подключение к нужному анклаву.The driver contacts the attestation service to ensure that it is connecting to right enclave.

  2. После аттестации анклава драйвер устанавливает защищенный канал с безопасным анклавом, размещенным на SQL Server.Once the enclave has been attested, the driver establishes a secure channel with the secure enclave hosted on SQL Server.

  3. Драйвер использует ключи шифрования, авторизованные клиентом, совместно с безопасным анклавом в течение всего соединения SQL.The driver shares encryption keys authorized by the client with the secure enclave for the duration of the SQL connection.

Windows Presentation FoundationWindows Presentation Foundation

Поиск ResourceDictionary по источникуFinding ResourceDictionaries by Source

Начиная с .NET Framework 4.7.2, помощник по диагностике может находить словари  ResourceDictionaries, созданные из указанного URI источника.Starting with .NET Framework 4.7.2, a diagnostic assistant can locate the ResourceDictionaries that have been created from a given source Uri. (Эта функция предназначена для использования помощником по диагностике, а не приложением в производственной среде.) Помощник по диагностике, например средство "Изменить и продолжить" в Visual Studio, позволяет пользователям редактировать ResourceDictionary с целью применить изменения к запущенному приложению. (This feature is for use by diagnostic assistants, not by production applications.) A diagnostic assistant such as Visual Studio’s “Edit-and-Continue” facility lets its user edit a ResourceDictionary with the intent that the changes be applied to the running application. Шагом к достижению этого является поиск всех ResourceDictionary, созданных запущенным приложением из редактируемого словаря.One step in achieving this is finding all the ResourceDictionaries that the running application has created from the dictionary that’s being edited. Например, приложение может объявить ResourceDictionary, содержимое которого копируется из определенного источника URI:For example, an application can declare a ResourceDictionary whose content is copied from a given source URI:

<ResourceDictionary Source="MyRD.xaml">

Помощник по диагностике, который изменяет исходную разметку в MyRD.xaml , может использовать новую функцию для поиска словаря.A diagnostic assistant that edits the original markup in MyRD.xaml can use the new feature to locate the dictionary. Эта функция реализуется новым статическим методом ResourceDictionaryDiagnostics.GetResourceDictionariesForSource. The feature is implemented by a new static method, ResourceDictionaryDiagnostics.GetResourceDictionariesForSource. Помощник по диагностике вызывает новый метод с помощью абсолютного URI, который определяет исходную разметку, как показано в следующем примере кода:The diagnostic assistant calls the new method using an absolute Uri that identifies the original markup, as illustrated by the following code:

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 .The method returns an empty enumerable unless VisualDiagnostics is enabled and the ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO environment variable is set.

Поиск владельцев ResourceDictionaryFinding ResourceDictionary owners

Начиная с .NET Framework 4.7.2, помощник по диагностике может находить владельцев определенного словаря ResourceDictionary.Starting with .NET Framework 4.7.2, a diagnostic assistant can locate the owners of a given ResourceDictionary. (Эта функция предназначена для помощников по диагностике, а не приложений в производственной среде.) При каждом изменении ResourceDictionary WPF автоматически обнаруживает все ссылки DynamicResource, на которые может повлиять изменение. (The feature is for use by diagnostic assistants and not by production applications.) Whenever a change is made to a ResourceDictionary, WPF automatically finds all DynamicResource references that might be affected by the change.

Помощник по диагностике, например средство "Изменить и продолжить" в Visual Studio, может в том числе обрабатывать ссылки StaticResource.A diagnostic assistant such as Visual Studio's "Edit-and-Continue" facility may want to extend this to handle StaticResource references. Первым этапом этого процесса является поиск владельцев словаря; то есть поиск всех объектов, свойство Resources которых ссылается на словарь (напрямую или косвенно через свойство ResourceDictionary.MergedDictionaries).The first step in this process is to find the owners of the dictionary; that is, to find all the objects whose Resources property refers to the dictionary (either directly, or indirectly via the ResourceDictionary.MergedDictionaries property). В поддержку этого этапа в классе System.Windows.Diagnostics.ResourceDictionaryDiagnostics реализовано три новых статических метода, по одному для каждого базового типа со свойством Resources:Three new static methods implemented on the System.Windows.Diagnostics.ResourceDictionaryDiagnostics class, one for each of the base types that has a Resources property, support this step:

Эти методы возвращают пустое перечисляемое значение, если не включен класс VisualDiagnostics и не указана переменная среды ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO .These methods return an empty enumerable unless VisualDiagnostics is enabled and the ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO environment variable is set.

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

Помощник по диагностике теперь может получать уведомление при разрешении ссылки StaticResource.A diagnostic assistant can now receive a notification whenever a StaticResource reference is resolved. (Эта функция предназначена для помощников по диагностике, а не приложений в производственной среде.) Помощник по диагностике, например средство "Изменить и продолжить" в Visual Studio, может обновить все случаи использования ресурса, когда его значение в ResourceDictionary меняется. (The feature is for use by diagnostic assistants, not by production applications.) A diagnostic assistant such as Visual Studio’s “Edit-and-Continue” facility may want to update all uses of a resource when its value in a ResourceDictionary changes. WPF выполняет это автоматически для ссылок DynamicResource, но специально не делает этого для ссылок StaticResource.WPF does this automatically for DynamicResource references, but it intentionally does not do so for StaticResource references. Начиная с .NET Framework 4.7.2, помощник по диагностике может использовать эти уведомления для поиска случаев использования статического ресурса.Starting with .NET Framework 4.7.2, the diagnostic assistant can use these notifications to locate those uses of the static resource.

Уведомление реализуется новым событием ResourceDictionaryDiagnostics.StaticResourceResolved:The notification is implemented by the new ResourceDictionaryDiagnostics.StaticResourceResolved event:

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

Это событие возникает каждый раз, когда среда выполнения разрешает ссылку StaticResource.This event is raised whenever the runtime resolves a StaticResource reference. Аргументы StaticResourceResolvedEventArgs описывают разрешение и ключ, используемый для разрешения, а также указывают объект и свойство, в котором указаны ссылка StaticResource и словарь ResourceDictionary: The StaticResourceResolvedEventArgs arguments describe the resolution, and indicate the object and property that host the StaticResource reference and the ResourceDictionary and key used for the resolution:

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 .The event is not raised (and its add accessor is ignored) unless VisualDiagnostics is enabled and the ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO environment variable is set.

ClickOnceClickOnce

Приложения, совместимые с HDPI, для Windows Forms, Windows Presentation Foundation (WPF) и Visual Studio Tools для Office (VSTO) можно развернуть с помощью ClickOnce.HDPI-aware applications for Windows Forms, Windows Presentation Foundation (WPF), and Visual Studio Tools for Office (VSTO) can all be deployed by using ClickOnce. Если в манифесте приложения обнаружена следующая запись, развертывание в .NET Framework 4.7.2 будет успешным:If the following entry is found in the application manifest, deployment will succeed under .NET Framework 4.7.2:

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

Для приложения Windows Forms использовавшийся ранее обходной путь установки поддержки определения DPI в файле конфигурации приложения вместо манифеста приложения больше не требуется для успешного развертывания ClickOnce.For Windows Forms application, the previous workaround of setting DPI awareness in the application configuration file rather than the application manifest is no longer necessary for ClickOnce deployment to succeed.

Новые возможности .NET Framework 4.7.1What's new in .NET Framework 4.7.1

.NET Framework 4.7.1 включает новые функции в следующих областях:.NET Framework 4.7.1 includes new features in the following areas:

Основной акцент в .NET Framework 4.7.1, как и прежде, сделан на улучшении специальных возможностей, что позволяет приложению предоставлять соответствующие функции целевой аудитории.In addition, a major focus in .NET Framework 4.7.1 is improved accessibility, which allows an application to provide an appropriate experience for users of Assistive Technology. См. подробнее об улучшениях специальных возможностей в .NET Framework 4.7.1.For information on accessibility improvements in .NET Framework 4.7.1, see What's new in accessibility in the .NET Framework.

базовых классов;Base classes

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

.NET Standard определяет набор интерфейсов API, которые должны быть доступны в каждой реализации .NET, поддерживающей эту версию стандарта..NET Standard defines a set of APIs that must be available on each .NET implementation that supports that version of the standard. .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 4.7.1 fully supports .NET Standard 2.0 and adds about 200 APIs that are defined in .NET Standard 2.0 and are missing from .NET Framework 4.6.1, 4.6.2, and 4.7. (Обратите внимание, что эти версии .NET Framework поддерживают .NET Standard 2.0 только в том случае, если дополнительные файлы поддержки .NET Standard также развертываются в целевой системе.) Дополнительные сведения см. в разделе о поддержке .NET Standard 2.0 в записи блога .NET Framework 4.7.1 Runtime and Compiler Features (Возможности среды выполнения .NET Framework 4.7.1 и компилятора).(Note that these versions of the .NET Framework support .NET Standard 2.0 only if additional .NET Standard support files are also deployed on the target system.) For more information, see "BCL - .NET Standard 2.0 Support" in the .NET Framework 4.7.1 Runtime and Compiler Features blog post.

Поддержка построителей конфигурацииSupport for configuration builders

Построители конфигурации позволяют разработчикам внедрять и динамически создавать параметры конфигурации для приложения во время выполнения.Configuration builders allow developers to inject and build configuration settings for applications dynamically at run time. Пользовательские построители конфигурации можно использовать для изменения существующих данных в разделе конфигурации или для создания раздела конфигурации с нуля.Custom configuration builders can be used to modify existing data in a configuration section or to build a configuration section entirely from scratch. Без построителей конфигурации файлы .config являются статическими, а их параметры определяются за некоторое время до запуска приложения.Without configuration builders, .config files are static, and their settings are defined some time before an application is launched.

Чтобы создать пользовательский построитель конфигурации, следует наследовать построитель от абстрактного класса ConfigurationBuilder и переопределить его ConfigurationBuilder.ProcessConfigurationSection и ConfigurationBuilder.ProcessRawXml.To create a custom configuration builder, you derive your builder from the abstract ConfigurationBuilder class and override its ConfigurationBuilder.ProcessConfigurationSection and ConfigurationBuilder.ProcessRawXml. Кроме того, построители можно определить в файле конфигурации.You also define your builders in your .config file. Дополнительные сведения см. в разделе о построителях конфигурации в записи блога .NET Framework 4.7.1 ASP.NET and Configuration Features (Возможности .NET Framework 4.7.1 ASP.NET и конфигурации).For more information, see the "Configuration Builders" section in the .NET Framework 4.7.1 ASP.NET and Configuration Features blog post.

Обнаружение функций во время выполненияRun-time feature detection

Класс System.Runtime.CompilerServices.RuntimeFeature предоставляет механизм, позволяющий определить, поддерживается ли предопределенная функция в данной реализации .NET во время компиляции или во время выполнения.The System.Runtime.CompilerServices.RuntimeFeature class provides a mechanism for determine whether a predefined feature is supported on a given .NET implementation at compile time or run time. Во время компиляции компилятор может проверить наличие указанного поля, чтобы определить, поддерживается ли эта функция. Если да, он может вывести код, использующий эту функцию.At compile time, a compiler can check whether a specified field exists to determine whether the feature is supported; if so, it can emit code that takes advantage of that feature. Во время выполнения приложение может вызвать метод RuntimeFeature.IsSupported до создания кода.At run time, an application can call the RuntimeFeature.IsSupported method before emitting code at runtime. Дополнительные сведения см. в статье Добавление вспомогательного метода для описания функций, поддерживаемых средой выполнения.For more information, see Add helper method to describe features supported by the runtime.

Типы кортежей значений являются сериализуемымиValue tuple types are serializable

Начиная с .NET Framework 4.7.1, System.ValueTuple и связанные универсальные типы помечаются как сериализуемые, что обеспечивает двоичную сериализацию.Starting with .NET Framework 4.7.1, System.ValueTuple and its associated generic types are marked as Serializable, which allows binary serialization. Эта возможность должна упростить миграцию типов кортежей, таких как Tuple<T1,T2,T3> и Tuple<T1,T2,T3,T4>, в типы кортежей значений.This should make migrating Tuple types, such as Tuple<T1,T2,T3> and Tuple<T1,T2,T3,T4>, to value tuple types easier. Дополнительные сведения см. в разделе о сериализации ValueTuple в записи блога .NET Framework 4.7.1 Runtime and Compiler Features (Возможности среды выполнения .NET Framework 4.7.1 и компилятора).For more information, see "Compiler -- ValueTuple is Serializable" in the .NET Framework 4.7.1 Runtime and Compiler Features blog post.

Поддержка ссылок только для чтенияSupport for read-only references

.NET Framework 4.7.1 включает System.Runtime.CompilerServices.IsReadOnlyAttribute..NET Framework 4.7.1 adds the System.Runtime.CompilerServices.IsReadOnlyAttribute. Этот атрибут используется компиляторами языка для пометки членов, имеющих типы возвращаемые ссылочные значения (или параметры) только для чтения.This attribute is used by language compilers to mark members that have read-only ref return types or parameters. Дополнительные сведения см. в разделе о поддержке ReadOnlyReferences в записи блога .NET Framework 4.7.1 Runtime and Compiler Features (Возможности среды выполнения .NET Framework 4.7.1 и компилятора).For more information, see "Compiler -- Support for ReadOnlyReferences" in the .NET Framework 4.7.1 Runtime and Compiler Features blog post. Сведения о возвращаемых ссылочных значениях см. в разделах Возвращаемые ссылочные значения и ссылочные локальные переменные (справочник по C#) и Возвращаемые ссылочные значения (Visual Basic).For information on ref return values, see Ref return values and ref locals (C# Guide) and Ref return values (Visual Basic).

Среда CLRCommon language runtime (CLR)

Повышение производительности сборки мусораGarbage collection performance improvements

Изменения функции сборки мусора (GC) в .NET Framework 4.7.1 повышают общую производительность, особенно для распределений кучи больших объектов (LOH).Changes to garbage collection (GC) in .NET Framework 4.7.1 improve overall performance, especially for large object heap (LOH) allocations. В .NET Framework 4.7.1 для распределений куч больших (LOH) и малых (SOH) объектов используются отдельные блокировки, что позволяет выполнять распределение кучи больших объектов, когда фоновый сборщик мусора очищает кучу малых объектов.In .NET Framework 4.7.1, separate locks are used for small object heap (SOH) and LOH allocations, which allows LOH allocations to occur when background GC is sweeping the SOH. В результате в приложениях с большим количеством операций выделения LOH сократится число конфликтов при блокировках выделений и улучшится производительность.As a result, applications that make a large number of LOH allocations should see a reduction in allocation lock contention and improved performance. Дополнительные сведения см. в разделе о повышении производительности сборки мусора в записи блога .NET Framework 4.7.1 Runtime and Compiler Features (Возможности среды выполнения .NET Framework 4.7.1 и компилятора).For more information, see the "Runtime -- GC Performance Improvements" section in the .NET Framework 4.7.1 Runtime and Compiler Features blog post.

СетиNetworking

Поддержка SHA-2 Message.HashAlgorithmSHA-2 support for Message.HashAlgorithm

В .NET Framework 4.7 и более ранних версиях свойство Message.HashAlgorithm поддерживало только значения HashAlgorithm.Md5 и HashAlgorithm.Sha.In .NET Framework 4.7 and earlier versions, the Message.HashAlgorithm property supported values of HashAlgorithm.Md5 and HashAlgorithm.Sha only. Начиная с .NET Framework 4.7.1, также поддерживаются значения HashAlgorithm.Sha256, HashAlgorithm.Sha384 и HashAlgorithm.Sha512.Starting with .NET Framework 4.7.1, HashAlgorithm.Sha256, HashAlgorithm.Sha384, and HashAlgorithm.Sha512 are also supported. Будет ли это значение использоваться на самом деле, зависит от MSMQ, поскольку сам экземпляр Message не выполняет хэширование, а просто передает значения в MSMQ.Whether this value is actually used depends on MSMQ, since the Message instance itself does no hashing but simply passes on values to MSMQ. Дополнительные сведения см. в разделе поддержке о SHA-2 для Message.HashAlgorithm в записи блога .NET Framework 4.7.1 ASP.NET and Configuration features (Возможности .NET Framework 4.7.1 ASP.NET и конфигурации).For more information, see the "SHA-2 support for Message.HashAlgorithm" section in the .NET Framework 4.7.1 ASP.NET and Configuration features blog post.

ASP.NETASP.NET

Действия выполнения в приложениях ASP.NETExecution steps in ASP.NET applications

ASP.NET обрабатывает запросы в предопределенном конвейере, который содержит 23 события.ASP.NET processes requests in a predefined pipeline that includes 23 events. ASP.NET выполняет каждый обработчик событий как действие выполнения.ASP.NET executes each event handler as an execution step. В версиях ASP.NET до .NET Framework 4.7 платформа ASP.NET не может использовать контекст выполнения из-за переключений между собственным и управляемым потоками.In versions of ASP.NET up to .NET Framework 4.7, ASP.NET can't flow the execution context due to switching between native and managed threads. Вместо этого ASP.NET выборочно выполняет только HttpContext.Instead, ASP.NET selectively flows only the HttpContext. Начиная с .NET Framework 4.7.1, метод HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) также позволяет использовать модули для восстановления внешних данных.Starting with .NET Framework 4.7.1, the HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) method also allows modules to restore ambient data. Эта функция предназначена для библиотек, связанных с трассировкой, профилированием, диагностикой или транзакциями, например для тех, которые учитывают поток работы приложения.This feature is targeted at libraries concerned with tracing, profiling, diagnostics, or transactions, for example, that care about the execution flow of the application. Дополнительные сведения см. в разделе о действии выполнения ASP.NET в записи блога .NET Framework 4.7.1 ASP.NET and Configuration Features (Возможности .NET Framework 4.7.1 ASP.NET и конфигурации).For more information, see the "ASP.NET Execution Step Feature" in the .NET Framework 4.7.1 ASP.NET and Configuration Features blog post.

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

В .NET Framework 4.7.1 добавлен новый метод HttpCookie.TryParse, который обеспечивает стандартный способ создания объекта HttpCookie из строки и позволяет точно назначать значения cookie, такие как дата окончания срока действия и путь..NET Framework 4.7.1 includes a new method, HttpCookie.TryParse, that provides a standardized way to create an HttpCookie object from a string and accurately assign cookie values such as expiration date and path. Дополнительные сведения см. в разделе о синтаксическом анализе HttpCookie ASP.NET в записи блога .NET Framework 4.7.1 ASP.NET and Configuration Features (Возможности .NET Framework 4.7.1 ASP.NET и конфигурации).For more information, see "ASP.NET HttpCookie parsing" in the .NET Framework 4.7.1 ASP.NET and Configuration Features blog post.

Функции хэширования SHA-2 для учетных данных проверки подлинности форм ASP.NETSHA-2 hash options for ASP.NET forms authentication credentials

В .NET Framework 4.7 и более ранних версиях разработчики ASP.NET могли хранить учетные данные пользователей с паролями, хэшированными с помощью MD5 или SHA1, в файлах конфигурации.In .NET Framework 4.7 and earlier versions, ASP.NET allowed developers to store user credentials with hashed passwords in configuration files using either MD5 or SHA1. Начиная с .NET Framework 4.7.1, ASP.NET также поддерживает новые безопасные функции алгоритма SHA-2, такие как SHA256, SHA384 и SHA512.Starting with .NET Framework 4.7.1, ASP.NET also supports new secure SHA-2 hash options such as SHA256, SHA384, and SHA512. SHA1 остается алгоритмом по умолчанию, а нестандартный хэш-алгоритм можно определить в файле веб-конфигурации.SHA1 remains the default, and a non-default hash algorithm can be defined in the web configuration file. Пример:For example:

<system.web>
    <authentication mode="Forms">
        <forms loginUrl="~/login.aspx">
          <credentials passwordFormat="SHA512">
            <user name="jdoe" password="6D003E98EA1C7F04ABF8FCB375388907B7F3EE06F278DB966BE960E7CBBD103DF30CA6D61F7E7FD981B2E4E3A64D43C836A4BEDCA165C33B163E6BCDC538A664" />
          </credentials>
        </forms>
    </authentication>
</system.web>

Новые возможности .NET Framework 4.7What's new in .NET Framework 4.7

.NET Framework 4.7 включает новые функции в следующих областях:.NET Framework 4.7 includes new features in the following areas:

См. подробнее об изменениях списка API в .NET Framework 4.7 на сайте GitHub.For a list of new APIs added to .NET Framework 4.7, see .NET Framework 4.7 API Changes on GitHub. См. подробнее об улучшенных функциях и исправленных ошибках в .NET Framework 4.7 на сайте GitHub.For a list of feature improvements and bug fixes in .NET Framework 4.7, see .NET Framework 4.7 List of Changes on GitHub. Дополнительные сведения см. в записи блога .NET, посвященной объявлению о выпуске .NET Framework 4.7.For more information, see Announcing the .NET Framework 4.7 in the .NET blog.

базовых классов;Base classes

.NET Framework 4.7 улучшает сериализацию, используя DataContractJsonSerializer:.NET Framework 4.7 improves serialization by the DataContractJsonSerializer:

Дополнительные функциональные возможности на основе эллиптической криптографии (ECC) *Enhanced functionality with Elliptic Curve Cryptography (ECC)*

В .NET Framework 4.7 добавлены методы ImportParameters(ECParameters) в классы ECDsa и ECDiffieHellman, которые позволяют объекту представлять уже установленный ключ.In .NET Framework 4.7, ImportParameters(ECParameters) methods were added to the ECDsa and ECDiffieHellman classes to allow for an object to represent an already-established key. Также добавлен метод ExportParameters(Boolean) для экспорта ключа с явными параметрами кривой.An ExportParameters(Boolean) method was also added for exporting the key using explicit curve parameters.

В .NET Framework 4.7 также добавлена поддержка дополнительных кривых (включая пакет кривых Brainpool) и стандартные определения для упрощения создания с помощью новых фабричных методов Create и Create..NET Framework 4.7 also adds support for additional curves (including the Brainpool curve suite), and has added predefined definitions for ease-of-creation through the new Create and Create factory methods.

На GitHub вы найдете пример криптографических улучшений в .NET Framework 4.7.You can see an example of .NET Framework 4.7 cryptography improvements on GitHub.

Улучшенная поддержка управляющих символов для DataContractJsonSerializerBetter support for control characters by the DataContractJsonSerializer

В .NET Framework 4.7 DataContractJsonSerializer сериализует управляющие символы в соответствии со стандартом ECMAScript 6.In .NET Framework 4.7, the DataContractJsonSerializer serializes control characters in conformity with the ECMAScript 6 standard. Это поведение включено по умолчанию для приложений, предназначенных для использования с .NET Framework 4.7, и предлагается в качестве дополнительной функции для приложений, которые выполняются в среде .NET Framework 4.7, но предназначены для использования с предыдущими версиями .NET Framework.This behavior is enabled by default for applications that target .NET Framework 4.7, and is an opt-in feature for applications that are running under .NET Framework 4.7 but target a previous version of the .NET Framework. Дополнительные сведения см. в статье Изменения целевой платформы в .NET Framework 4.7.For more information, see Retargeting Changes in the .NET Framework 4.7.

СетиNetworking

В .NET Framework 4.7 добавлена следующая сетевая функция:.NET Framework 4.7 adds the following network-related feature:

Поддержка операционной системы по умолчанию для протоколов TLS*Default operating system support for TLS protocols*

Стек TLS, который используется в System.Net.Security.SslStream и других компонентах, расположенных в стеке над ним (например, HTTP, FTP и SMTP), позволяет разработчикам использовать протоколы TLS по умолчанию, поддерживаемые операционной системой.The TLS stack, which is used by System.Net.Security.SslStream and up-stack components such as HTTP, FTP, and SMTP, allows developers to use the default TLS protocols supported by the operating system. Разработчики теперь не обязаны жестко указывать версию TLS.Developers need no longer hard-code a TLS version.

ASP.NETASP.NET

В ASP.NET в .NET Framework 4.7 добавлены следующие новые функции:In .NET Framework 4.7, ASP.NET includes the following new features:

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

Начиная с .NET Framework 4.7 в ASP.NET добавлен новый набор API, которые позволяют разработчикам заменить стандартные реализации ASP.NET для кэширования объектов в памяти и мониторинга использования памяти.Starting with .NET Framework 4.7, ASP.NET adds a new set of APIs that allow developers to replace the default ASP.NET implementations for in-memory object caching and memory monitoring. Разработчики могут переопределить любой из следующих трех компонентов, если их не устраивает стандартная реализация ASP.NET.Developers can now replace any of the following three components if the ASP.NET implementation is not adequate:

  • Хранилище кэша объектов.Object Cache Store. В новом разделе конфигурации поставщиков кэша разработчик может подключить новую реализацию кэша объектов для приложения ASP.NET с помощью нового интерфейса ICacheStoreProvider.By using the new cache providers configuration section, developers can plug in new implementations of an object cache for an ASP.NET application by using the new ICacheStoreProvider interface.

  • Мониторинг памяти.Memory monitoring. Стандартный монитор памяти ASP.NET уведомляет приложения о том, что они приближаются к настроенному для процесса лимиту байтов исключительного пользования, а также о нехватке общей доступной физической памяти на компьютере.The default memory monitor in ASP.NET notifies applications when they are running close to the configured private bytes limit for the process, or when the machine is low on total available physical RAM. Уведомление срабатывает незадолго до достижения ограничения.When these limits are near, notifications are fired. Для некоторых приложений эти уведомления поступают слишком поздно и не позволяют предпринять никаких разумных действий.For some applications, notifications are fired too close to the configured limits to allow for useful reactions. Разработчики могут использовать собственные мониторы памяти, чтобы заменить значение по умолчанию с помощью свойства ApplicationMonitors.MemoryMonitor.Developers can now write their own memory monitors to replace the default by using the ApplicationMonitors.MemoryMonitor property.

  • Реакции на достижение лимита памяти.Memory Limit Reactions. По умолчанию ASP.NET пытается обрезать кэш объектов, периодически вызывая функцию GC.Collect при приближении к лимиту байтов исключительного пользования для процесса.By default, ASP.NET attempts to trim the object cache and periodically call GC.Collect when the private byte process limit is near. Для некоторых приложений частота вызовов GC.Collect или размер кэша после обрезки не позволяют обеспечить эффективность работы.For some applications, the frequency of calls to GC.Collect or the amount of cache that is trimmed are inefficient. Теперь разработчик может изменить или дополнить поведение по умолчанию, назначив собственную реализацию IObserver в качестве монитора памяти для приложения.Developers can now replace or supplement the default behavior by subscribing IObserver implementations to the application's memory monitor.

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)

В Windows Communication Foundation (WCF) добавлены следующие функции и изменения:Windows Communication Foundation (WCF) adds the following features and changes:

Возможность настраивать параметры безопасности сообщений по умолчанию для TLS 1.1 или TLS 1.2Ability to configure the default message security settings to TLS 1.1 or TLS 1.2

Начиная с .NET Framework 4.7, WCF позволяет настраивать в качестве протокола безопасности сообщений по умолчанию протоколы TSL 1.1 и TLS 1.2, а не только SSL 3.0 и TSL 1.0.Starting with .NET Framework 4.7, WCF allows you to configure TSL 1.1 or TLS 1.2 in addition to SSL 3.0 and TSL 1.0 as the default message security protocol. Эту возможность нужно дополнительно активировать, добавив следующую запись в файл конфигурации приложения:This is an opt-in setting; to enable it, you must add the following entry to your application configuration file:

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

Повышенная надежность приложений WCF и сериализации WCFImproved reliability of WCF applications and WCF serialization

Для WCF внесены несколько изменений кода, которые позволяют избежать состояний гонки, повышая таким образом производительность и надежность методов сериализации.WCF includes a number of code changes that eliminate race conditions, thereby improving performance and the reliability of serialization options. Сюда входит следующее.These include:

  • Улучшение поддержки для совместного использования асинхронного и синхронного кода в вызовах SocketConnection.BeginRead и SocketConnection.Read.Better support for mixing asynchronous and synchronous code in calls to SocketConnection.BeginRead and SocketConnection.Read.
  • Повышение надежности при разрыве подключения с SharedConnectionListener и DuplexChannelBinder.Improved reliability when aborting a connection with SharedConnectionListener and DuplexChannelBinder.
  • Повышение надежности операций сериализации при вызове метода FormatterServices.GetSerializableMembers(Type).Improved reliability of serialization operations when calling the FormatterServices.GetSerializableMembers(Type) method.
  • Повышение надежности при удалении обслуживающего потока путем вызова метода ChannelSynchronizer.RemoveWaiter.Improved reliability when removing a waiter by calling the ChannelSynchronizer.RemoveWaiter method.

Windows FormsWindows Forms

В .NET Framework 4.7 для Windows Forms улучшена поддержка мониторов с высоким разрешением.In .NET Framework 4.7, Windows Forms improves support for high DPI monitors.

Поддержка высокого разрешенияHigh DPI support

Начиная с приложений, предназначенных для использования с .NET Framework 4.7, в .NET Framework поддерживается высокое разрешение и динамическое разрешение для приложений Windows Forms.Starting with applications that target .NET Framework 4.7, the .NET Framework features high DPI and dynamic DPI support for Windows Forms applications. Поддержка высокого разрешения улучшает расположение и внешний вид форм и элементов управления на мониторах с высокой плотностью точек на дюйм.High DPI support improves the layout and appearance of forms and controls on high DPI monitors. Функция динамического разрешения изменяет расположение и внешний вид формы и элементов управления, когда пользователь изменяет разрешение монитора или масштаб отображения при запущенном приложении.Dynamic DPI changes the layout and appearance of forms and controls when the user changes the DPI or display scale factor of a running application.

Поддержку высокого разрешения нужно активировать дополнительно, определив раздел <System.Windows.Forms.ConfigurationSection> в файле конфигурации приложения.High DPI support is an opt-in feature that you configure by defining a <System.Windows.Forms.ConfigurationSection> section in your application configuration file. Дополнительные сведения об активации поддержки высокого разрешения и динамического разрешения для приложений Windows Forms вы можете найти в статье Поддержка высокого DPI в Windows Forms.For more information on adding high DPI support and dynamic DPI support to your Windows Forms application, see High DPI Support in Windows Forms.

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

В .NET Framework 4.7 добавлены следующие улучшения WPF:In .NET Framework 4.7, WPF includes the following enhancements:

Поддержка стека для управления касанием или пером, основанного на сообщениях Windows WM_POINTERSupport for a touch/stylus stack based on Windows WM_POINTER messages

Теперь вы можете использовать стек управления касанием или пером на основе сообщений WM_POINTER вместо платформы служб рукописного ввода Windows (WISP).You now have the option of using a touch/stylus stack based on WM_POINTER messages instead of the Windows Ink Services Platform (WISP). Эту функцию нужно отдельно активировать в .NET Framework.This is an opt-in feature in the .NET Framework. Дополнительные сведения см. в статье Изменения целевой платформы в .NET Framework 4.7.For more information, see Retargeting Changes in the .NET Framework 4.7.

Новая реализация интерфейсов API WPF для печатиNew implementation for WPF printing APIs

API-интерфейсы WPF для печати в классе System.Printing.PrintQueue вызывают API пакета печати документа Windows вместо устаревших API печати XPS.WPF's printing APIs in the System.Printing.PrintQueue class call the Windows Print Document Package API instead of the deprecated XPS Print API. Влияние этого изменения на совместимость приложений можно изучить в статье Изменения целевой платформы в .NET Framework 4.7.For the impact of this change on application compatibility, see Retargeting Changes in the .NET Framework 4.7.

Новые возможности .NET Framework 4.6.2What's new in .NET Framework 4.6.2

Версия .NET Framework 4.6.2 включает новые функции в следующих областях:The .NET Framework 4.6.2 includes new features in the following areas:

См. подробнее об изменениях списка API в .NET Framework 4.6.2 на сайте GitHub.For a list of new APIs added to .NET Framework 4.6.2, see .NET Framework 4.6.2 API Changes on GitHub. См. подробнее об улучшенных функциях и исправленных ошибках в .NET Framework 4.6.2 на сайте GitHub.For a list of feature improvements and bug fixes in .NET Framework 4.6.2, see .NET Framework 4.6.2 List of Changes on GitHub. Дополнительные сведения см. в записи блога .NET, посвященной объявлению о выпуске .NET Framework 4.6.2.For more information, see Announcing .NET Framework 4.6.2 in the .NET blog.

ASP.NETASP.NET

ASP.NET в .NET Framework 4.6.2 включает следующие улучшения.In the .NET Framework 4.6.2, ASP.NET includes the following enhancements:

Улучшена поддержка локализованных сообщений об ошибках в проверяющих элементах управления заметок к данным.Improved support for localized error messages in data annotation validators

Модули проверки заметок к данным позволяют выполнять проверки путем добавления одного или нескольких атрибутов к свойству класса.Data annotation validators enable you to perform validation by adding one or more attributes to a class property. Элемент ValidationAttribute.ErrorMessage атрибута определяет текст сообщения об ошибке, если проверка не пройдена.The attribute's ValidationAttribute.ErrorMessage element defines the text of the error message if validation fails. Начиная с .NET Framework 4.6.2 в ASP.NET упрощена локализация сообщений об ошибках.Starting with the .NET Framework 4.6.2, ASP.NET makes it easy to localize error messages. Локализация сообщений об ошибках происходит в указанных далее случаях.Error messages will be localized if:

  1. В атрибуте проверки указан ValidationAttribute.ErrorMessage.The ValidationAttribute.ErrorMessage is provided in the validation attribute.

  2. Файл ресурсов хранится в папке App_LocalResources.The resource file is stored in the App_LocalResources folder.

  3. Имя локализованного файла ресурсов имеет форму DataAnnotation.Localization.{имя}.resx, где имя — это имя языка и региональных параметров в формате languageCode-country/regionCode или languageCode.The name of the localized resources file has the form DataAnnotation.Localization.{name}.resx, where name is a culture name in the format languageCode-country/regionCode or languageCode.

  4. Имя ключа ресурса является строкой, назначенной атрибуту ValidationAttribute.ErrorMessage, а его значением является локализованное сообщение об ошибке.The key name of the resource is the string assigned to the ValidationAttribute.ErrorMessage attribute, and its value is the localized error message.

Например, следующий атрибут заметки к данным задает сообщение об ошибке для неверной оценки в рамках языка и региональных параметров по умолчанию.For example, the following data annotation attribute defines the default culture's error message for an invalid rating.

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.Localization.fr.resx, ключом в котором является строка сообщения об ошибке, а значением — локализованное сообщение об ошибке.You can then create a resource file, DataAnnotation.Localization.fr.resx, whose key is the error message string and whose value is the localized error message. Этот файл должен находиться в папке App.LocalResources.The file must be found in the App.LocalResources folder. Например, ниже приведен ключ и его значение в сообщении об ошибке, локализованном в рамках французского языка и региональных параметров (French (fr)).For example, the following is the key and its value in a localized French (fr) language error message:

nameName ЗначениеValue
The rating must be between 1 and 10.The rating must be between 1 and 10. La note doit être comprise entre 1 et 10.La note doit être comprise entre 1 et 10.

Кроме того, локализация заметок к данным является расширяемой.In addition, data annotation localization is extensible. Разработчики могут подключить собственный поставщик локализатора строк путем реализации интерфейса IStringLocalizerProvider для хранения строки локализации в месте, отличном от файла ресурсов.Developers can plug in their own string localizer provider by implementing the IStringLocalizerProvider interface to store localization string somewhere other than in a resource file.

Поддержка асинхронного выполнения с поставщиками хранилищ состояния сеансовAsync support with session-state store providers

Теперь ASP.NET позволяет использовать методы, возвращающие задачи, с поставщиками хранилища состояния сеанса, тем самым разрешая приложениям ASP.NET реализовывать преимущества масштабируемости асинхронных операций.ASP.NET now allows task-returning methods to be used with session-state store providers, thereby allowing ASP.NET apps to get the scalability benefits of async. Для поддержки асинхронных операций с поставщиками хранилищ состояния сеансов ASP.NET предлагает новый интерфейс System.Web.SessionState.ISessionStateModule, который наследует от IHttpModule и позволяет разработчикам реализовывать их собственные модули состояния сеансов и асинхронные поставщики хранилищ сеансов.To supports asynchronous operations with session state store providers, ASP.NET includes a new interface, System.Web.SessionState.ISessionStateModule, which inherits from IHttpModule and allows developers to implement their own session-state module and async session store providers. Интерфейс определяется следующим образом:The interface is defined as follows:

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), которые можно использоваться для поддержки асинхронных операций.In addition, the SessionStateUtility class includes two new methods, IsSessionStateReadOnly and IsSessionStateRequired, that can be used to support asynchronous operations.

Поддержка асинхронного выполнения поставщиков кэша выводаAsync support for output-cache providers

Начиная с .NET Framework 4.6.2 с поставщиками кэша вывода можно использовать методы, возвращающие задачи, чтобы воспользоваться преимуществами асинхронных операций по масштабируемости.Starting with the .NET Framework 4.6.2, task-returning methods can be used with output-cache providers to provide the scalability benefits of async. Поставщики, реализующие эти методы, сокращают вероятность блокировок потоков на веб-сервере и улучшают масштабируемость службы ASP.NET.Providers that implement these methods reduce thread-blocking on a web server and improve the scalability of an ASP.NET service.

Для поддержки поставщиков кэша асинхронного вывода были добавлены следующие API:The following APIs have been added to support asynchronous output-cache providers:

Категории символовCharacter categories

Символы в .NET Framework 4.6.2 классифицируются на основе стандарта Юникод версии 8.0.0.Characters in the .NET Framework 4.6.2 are classified based on the Unicode Standard, Version 8.0.0. В .NET Framework 4.6 и .NET Framework 4.6.1 символы классифицировались на основе категорий символов Юникода 6.3.In .NET Framework 4.6 and .NET Framework 4.6.1, characters were classified based on Unicode 6.3 character categories.

Поддержка Юникода 8.0 ограничена классификацией символов по классу CharUnicodeInfo и связанными типами и методами.Support for Unicode 8.0 is limited to the classification of characters by the CharUnicodeInfo class and to types and methods that rely on it. К ним относятся класс StringInfo, перегруженный метод Char.GetUnicodeCategory и классы символов, распознаваемые обработчиком регулярных выражений .NET Framework.These include the StringInfo class, the overloaded Char.GetUnicodeCategory method, and the character classes recognized by the .NET Framework regular expression engine. Это изменение не влияет на сравнение и сортировку символов и строк. Они по-прежнему зависят от базовой операционной системы или в системах Windows 7 от символьных данных, предоставляемых .NET Framework.Character and string comparison and sorting is unaffected by this change and continues to rely on the underlying operating system or, on Windows 7 systems, on character data provided by the .NET Framework.

Сведения об изменениях в категориях символов Юникода 6.0–7.0 см. в статье The Unicode Standard, Version 7.0.0 на веб-сайте консорциума Юникода.For changes in character categories from Unicode 6.0 to Unicode 7.0, see The Unicode Standard, Version 7.0.0 at The Unicode Consortium website. Сведения об изменениях в категориях символов Юникода 7.0–8.0 см. в статье The Unicode Standard, Version 8.0.0 на веб-сайте Консорциума Юникода.For changes from Unicode 7.0 to Unicode 8.0, see The Unicode Standard, Version 8.0.0 at The Unicode Consortium website.

ШифрованиеCryptography

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

В .NET Framework 4.6.2 добавлена поддержка сертификатов X509 с алгоритмом DSA, ключи которых превышают 1024-разрядное ограничение FIPS 186-2.The .NET Framework 4.6.2 adds support for DSA (Digital Signature Algorithm) X509 certificates whose keys exceed the FIPS 186-2 1024-bit limit.

В дополнение к поддержке ключей FIPS 186-3 больших размеров, .NET Framework 4.6.2 позволяет вычислять подписи с использованием семейства алгоритмов хэширования SHA-2 (SHA256, SHA384 и SHA512).In addition to supporting the larger key sizes of FIPS 186-3, the .NET Framework 4.6.2 allows computing signatures with the SHA-2 family of hash algorithms (SHA256, SHA384, and SHA512). Поддержка FIPS 186 3 осуществляется с помощью нового класса System.Security.Cryptography.DSACng.FIPS 186-3 support is provided by the new System.Security.Cryptography.DSACng class.

Чтобы обеспечить соответствие последним изменениям в классе RSA в .NET Framework 4.6 и классе ECDsa в .NET Framework 4.6.1, абстрактный базовый класс DSA в .NET Framework 4.6.2 включает дополнительные методы, позволяющие вызывающим сторонам использовать эту функцию без приведения.In keeping with recent changes to the RSA class in .NET Framework 4.6 and the ECDsa class in .NET Framework 4.6.1, the DSA abstract base class in .NET Framework 4.6.2 has additional methods to allow callers to use this functionality without casting. Можно вызвать метод расширения DSACertificateExtensions.GetDSAPrivateKey для подписывания данных, как показано в следующем примере.You can call the DSACertificateExtensions.GetDSAPrivateKey extension method to sign data, as the following example shows.

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 для проверки подписанных данных, как показано в следующем примере.And you can call the DSACertificateExtensions.GetDSAPublicKey extension method to verify signed data, as the following example shows.

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

Повышенная четкость входных данных для процедур формирования ключа ECDiffieHellmanIncreased clarity for inputs to ECDiffieHellman key derivation routines

В .NET Framework 3.5 добавлена поддержка соглашения о ключах Диффи — Хелмана на эллиптических кривых с тремя разными процедурами формирования ключа..NET Framework 3.5 added support for Elliptic Curve Diffie-Hellman Key Agreement with three different Key Derivation Function (KDF) routines. Входные данные для процедур и сами процедуры настраивались с помощью свойств объекта ECDiffieHellmanCng.The inputs to the routines, and the routines themselves, were configured via properties on the ECDiffieHellmanCng object. Однако поскольку не все процедуры правильно считывали каждое входное свойство, часто возникала путаница.But since not every routine read every input property, there was ample room for confusion on the past of the developer.

В .NET Framework 4.6.2 для решения этой проблемы в базовый класс ECDiffieHellman были добавлены следующие три метода, предназначенные для более четкого представления этих подпрограмм функций формирования ключа и их входных данных.To address this in the .NET Framework 4.6.2, the following three methods have been added to the ECDiffieHellman base class to more clearly represent these KDF routines and their inputs:

Метод ECDiffieHellmanECDiffieHellman method ОписаниеDescription
DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) Получает материал ключа с помощью формулыDerives key material using the formula

HASH(secretPrepend || x || secretAppend)HASH(secretPrepend || x || secretAppend)

HASH(secretPrepend OrElse x OrElse secretAppend)HASH(secretPrepend OrElse x OrElse secretAppend)

здесь x является вычисляемым результатом алгоритма Диффи-Хелмана на эллиптических кривых.where x is the computed result of the EC Diffie-Hellman algorithm.
DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) Получает материал ключа с помощью формулыDerives key material using the formula

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

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

здесь x является вычисляемым результатом алгоритма Диффи-Хелмана на эллиптических кривых.where x is the computed result of the EC Diffie-Hellman algorithm.
DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) Получает материал ключа с помощью алгоритма наследования псевдослучайной функции (PRF) TLS.Derives key material using the TLS pseudo-random function (PRF) derivation algorithm.

Поддержка симметричного шифрования с помощью постоянного ключаSupport for persisted-key symmetric encryption

В библиотеку шифрования Windows (CNG) добавлена поддержка хранения постоянных симметричных ключей и использования хранящихся в оборудовании симметричных ключей. Разработчики могут применять эти возможности начиная с версии .NET Framework 4.6.2.The Windows cryptography library (CNG) added support for storing persisted symmetric keys and using hardware-stored symmetric keys, and the .NET Framework 4.6.2 made it possible for developers to make use of this feature. Поскольку понятие имен ключей и поставщиков ключей зависит от реализации, для применения этой функции требуется использовать конструктор конкретных типов реализации, а не предпочтительный метод (например, вызов Aes.Create).Since the notion of key names and key providers is implementation-specific, using this feature requires utilizing the constructor of the concrete implementation types instead of the preferred factory approach (such as calling Aes.Create).

Поддержка симметричного шифрования с помощью постоянных ключей доступна для алгоритмов AES (AesCng) и 3DES (TripleDESCng).Persisted-key symmetric encryption support exists for the AES (AesCng) and 3DES (TripleDESCng) algorithms. Пример:For example:

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-2SignedXml support for SHA-2 hashing

В .NET Framework 4.6.2 добавлена поддержка класса SignedXml для методов подписи RSA-SHA256, RSA-SHA384 и RSA-SHA512 PKCS#1 и алгоритмов выборки SHA256, SHA384 и SHA512.The .NET Framework 4.6.2 adds support to the SignedXml class for RSA-SHA256, RSA-SHA384, and RSA-SHA512 PKCS#1 signature methods, and SHA256, SHA384, and SHA512 reference digest algorithms.

Константы URI представлены в SignedXml:The URI constants are all exposed on SignedXml:

Поле SignedXmlSignedXml field КонстантаConstant
XmlDsigSHA256Url "http://www.w3.org/2001/04/xmlenc#sha256""http://www.w3.org/2001/04/xmlenc#sha256"
XmlDsigRSASHA256Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256""http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
XmlDsigSHA384Url "http://www.w3.org/2001/04/xmldsig-more#sha384""http://www.w3.org/2001/04/xmldsig-more#sha384"
XmlDsigRSASHA384Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384""http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"
XmlDsigSHA512Url "http://www.w3.org/2001/04/xmlenc#sha512""http://www.w3.org/2001/04/xmlenc#sha512"
XmlDsigRSASHA512Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512""http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"

Программы, которые зарегистрировали пользовательский обработчик SignatureDescription в CryptoConfig для дополнительной поддержки этих алгоритмов, будут работать, как и раньше, однако поскольку теперь существуют платформы по умолчанию, регистрировать CryptoConfig больше не требуется.Any programs that have registered a custom SignatureDescription handler into CryptoConfig to add support for these algorithms will continue to function as they did in the past, but since there are now platform defaults, the CryptoConfig registration is no longer necessary.

SqlClientSqlClient

Поставщик данных .NET Framework для SQL Server (System.Data.SqlClient) предлагает следующие новые возможности в .NET Framework 4.6.2..NET Framework Data Provider for SQL Server (System.Data.SqlClient) includes the following new features in the .NET Framework 4.6.2:

Объединение подключений в пул и использование времени ожидания в базах данных SQL AzureConnection pooling and timeouts with Azure SQL databases

Если включено объединение подключений в пул и наступает время ожидания или возникает другая ошибка входа, происходит кэширование исключения. При последующих попытках подключения в следующий период от 5 секунд до 1 минуты создается кэшированное исключение.When connection pooling is enabled and a timeout or other login error occurs, an exception is cached, and the cached exception is thrown on any subsequent connection attempt for the next 5 seconds to 1 minute. Дополнительные сведения см. в разделе Пулы подключений SQL Server (ADO.NET).For more information, see SQL Server Connection Pooling (ADO.NET).

Это поведение является нежелательным при подключении к базам данных SQL Azure, поскольку попытки соединения могут завершиться временными ошибками, которые обычно быстро исправляются.This behavior is not desirable when connecting to Azure SQL Databases, since connection attempts can fail with transient errors that are typically recovered quickly. В целях максимальной оптимизации процедуры повторных попыток подключения поведение периода блокировки пула подключений удаляется при сбое соединений с базами данных SQL Azure.To better optimize the connection retry experience, the connection pool blocking period behavior is removed when connections to Azure SQL Databases fail.

За счет добавленного нового ключевого слова PoolBlockingPeriod вы можете выбирать период времени блокировки, лучше всего подходящий для вашего приложения.The addition of the new PoolBlockingPeriod keyword lets you select the blocking period best suited for your app. К этим значениям относятся следующие.Values include:

Auto

Период блокировки пула подключений для приложения, которое подключается к базе данных SQL Azure, отключается, а период блокировки пула подключений для приложения, которое подключается к другому экземпляру SQL Server, включается.The connection pool blocking period for an application that connects to an Azure SQL Database is disabled, and the connection pool blocking period for an application that connects to any other SQL Server instance is enabled. Это значение по умолчанию.This is the default value. Если имя конечной точки сервера заканчивается любой из приведенных ниже строк, она считается базой данных SQL Azure.If the Server endpoint name ends with any of the following, they are considered Azure SQL Databases:

  • .database.windows.net.database.windows.net

  • .database.chinacloudapi.cn.database.chinacloudapi.cn

  • .database.usgovcloudapi.net.database.usgovcloudapi.net

  • .database.cloudapi.de.database.cloudapi.de

AlwaysBlock

Период блокировки пула подключений всегда включен.The connection pool blocking period is always enabled.

NeverBlock

Период блокировки пула подключений всегда отключен.The connection pool blocking period is always disabled.

Усовершенствования функции Always EncryptedEnhancements for Always Encrypted

В SQLClient представлены два усовершенствования для функции Always Encrypted.SQLClient introduces two enhancements for Always Encrypted:

  • Для повышения производительности параметризованных запросов к зашифрованным столбцам базы данных выполняется кэширование метаданных шифрования для параметров запроса.To improve performance of parameterized queries against encrypted database columns, encryption metadata for query parameters is now cached. Если свойству SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled задано значение true (это значение по умолчанию) и один и тот же запрос вызывается несколько раз, клиент получает метаданные параметров с сервера только один раз.With the SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled property set to true (which is the default value), if the same query is called multiple times, the client retrieves parameter metadata from the server only once.

  • Теперь записи ключей шифрования столбцов в кэше ключа вытесняются по истечении интервала времени, настроенного с помощью свойства SqlConnection.ColumnEncryptionKeyCacheTtl.Column encryption key entries in the key cache are now evicted after a configurable time interval, set using the SqlConnection.ColumnEncryptionKeyCacheTtl property.

Windows Communication FoundationWindows Communication Foundation

В.NET Framework 4.6.2 Windows Communication Foundation получила ряд улучшений в следующих областях.In the .NET Framework 4.6.2, Windows Communication Foundation has been enhanced in the following areas:

Поддержка безопасности транспорта WCF для сертификатов, сохраненных с помощью CNGWCF transport security support for certificates stored using CNG

Безопасность транспорта WCF поддерживает сертификаты, сохраненные с использованием библиотеки шифрования Windows (CNG).WCF transport security supports certificates stored using the Windows cryptography library (CNG). В .NET Framework 4.6.2 эта поддержка ограничивается использованием сертификатов с открытым ключом, длина экспоненты которого не превышает 32 бита.In the .NET Framework 4.6.2, this support is limited to using certificates with a public key that has an exponent no more than 32 bits in length. Если приложение предназначено для .NET Framework 4.6.2, эта функция включена по умолчанию.When an application targets the .NET Framework 4.6.2, this feature is on by default.

Для приложений, которые предназначены для .NET Framework 4.6.1 и более ранних версий, но работают в .NET Framework 4.6.2, эту функцию можно включить отдельно, добавив указанную ниже строку в раздел <runtime> файла app.config или web.config.For applications that target the .NET Framework 4.6.1 and earlier but are running on the .NET Framework 4.6.2, this feature can be enabled by adding the following line to the <runtime> section of the app.config or web.config file.

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

Это также можно сделать программно с помощью следующего кода:This can also be done programmatically with code like the following:

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

Улучшенная поддержка нескольких правил коррекции летнего времени с помощью класса DataContractJsonSerializerBetter support for multiple daylight saving time adjustment rules by the DataContractJsonSerializer class

Клиенты могут использовать параметр конфигурации приложения для определения того, поддерживает ли класс DataContractJsonSerializer несколько правил коррекции для одного часового пояса.Customers can use an application configuration setting to determine whether the DataContractJsonSerializer class supports multiple adjustment rules for a single time zone. Это функция, включаемая пользователем.This is an opt-in feature. Чтобы ее включить, добавьте следующий параметр в файл app.config:To enable it, add the following setting to your app.config file:

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

Если эта возможность включена, объект DataContractJsonSerializer использует тип TimeZoneInfo вместо типа TimeZone для десериализации данных даты и времени.When this feature is enabled, a DataContractJsonSerializer object uses the TimeZoneInfo type instead of the TimeZone type to deserialize date and time data. TimeZoneInfo поддерживает несколько правил коррекции, что позволяет работать с историческими данными часового пояса, а TimeZone — не поддерживает.TimeZoneInfo supports multiple adjustment rules, which makes it possible to work with historic time zone data; TimeZone does not.

Дополнительные сведения о структуре TimeZoneInfo и коррекциях часового пояса см. в статье Общие сведения о часовых поясах.For more information on the TimeZoneInfo structure and time zone adjustments, see Time Zone Overview.

Наилучшее соответствие NetNamedPipeBindingNetNamedPipeBinding best match

В WCF представлен новый параметр приложения, который может быть задан в клиентских приложениях для их постоянного подключения к службе, прослушивающей URI, наилучшим образом соответствующий запрошенному.WCF has a new app setting that can be set on client applications to ensure they always connect to the service listening on the URI that best matches the one that they request. Если этот параметр приложения имеет значение false (по умолчанию), клиенты могут использовать NetNamedPipeBinding для подключения к службе, прослушивающей URI, который является подстрокой запрошенного URI.With this app setting set to false (the default), it is possible for clients using NetNamedPipeBinding to attempt to connect to a service listening on a URI that is a substring of the requested URI.

Например, клиент пытается подключиться к службе, прослушивающей net.pipe://localhost/Service1, но другая служба на этом компьютере, запущенная с правами администратора, прослушивает net.pipe://localhost.For example, a client tries to connect to a service listening at net.pipe://localhost/Service1, but a different service on that machine running with administrator privilege is listening at net.pipe://localhost. Если этому параметру приложения задать значение false, клиент будет пытаться подключиться не к той службе.With this app setting set to false, the client would attempt to connect to the wrong service. После установки значения true для параметра приложения клиент будет всегда подключаться к наиболее подходящей службе.After setting the app setting to true, the client will always connect to the best matching service.

Примечание

Клиенты, использующие NetNamedPipeBinding, находят службы на основе их базового адреса (если он существует), а не на основе полного адреса конечной точки.Clients using NetNamedPipeBinding find services based on the service's base address (if it exists) rather than the full endpoint address. Чтобы обеспечить постоянную работу этого параметра, служба должна использовать уникальный базовый адрес.To ensure this setting always works the service should use a unique base address.

Для активации этого изменения добавьте следующий параметр в файл App.config или Web.config клиентского приложения:To enable this change, add the following app setting to your client application's App.config or Web.config file:

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

SSL 3.0 не является протоколом по умолчаниюSSL 3.0 is not a default protocol

При использовании NetTcp для обеспечения безопасности транспорта и применении типа учетных данных сертификата SSL 3.0 больше не является протоколом по умолчанию для согласования безопасного соединения.When using NetTcp with transport security and a credential type of certificate, SSL 3.0 is no longer a default protocol used for negotiating a secure connection. В большинстве случаев существующие приложения не должны затрагиваться, поскольку TLS 1.0 входит в список протоколов для NetTcp.In most cases, there should be no impact to existing apps, because TLS 1.0 is included in the protocol list for NetTcp. Все существующие клиенты должны иметь возможность согласовывать подключение с помощью хотя бы TLS 1.0.All existing clients should be able to negotiate a connection using at least TLS 1.0. Если требуется Ssl3, воспользуйтесь одним из указанных ниже механизмов конфигурации и добавьте его в список установленных протоколов.If Ssl3 is required, use one of the following configuration mechanisms to add it to the list of negotiated protocols.

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

В.NET Framework 4.6.2 Windows Presentation Foundation получила ряд улучшений в следующих областях.In the .NET Framework 4.6.2, Windows Presentation Foundation has been enhanced in the following areas:

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

Приложение, использующее объект CollectionView для группирования данных, теперь может явно объявлять порядок сортировки групп.An application that uses a CollectionView object to group data can now explicitly declare how to sort the groups. Явная сортировка позволяет решить проблему неочевидного упорядочивания, которая возникает, когда приложение динамически добавляет или удаляет группы или когда оно изменяет значения свойств элементов, участвующих в группировании.Explicit sorting addresses the problem of non-intuitive ordering that occurs when an app dynamically adds or removes groups, or when it changes the value of item properties involved in grouping. Она также может повысить производительность процесса создания группы путем перемещения сравнений свойств группирования из сортировки полной коллекции в сортировку групп.It can also improve the performance of the group creation process by moving comparisons of the grouping properties from the sort of the full collection to the sort of the groups.

Для поддержки сортировки групп новые свойства GroupDescription.SortDescriptions и GroupDescription.CustomSort описывают способ сортировки коллекции групп, созданной объектом GroupDescription.To support group sorting, the new GroupDescription.SortDescriptions and GroupDescription.CustomSort properties describe how to sort the collection of groups produced by the GroupDescription object. Эта процедура аналогична способу, которым свойства ListCollectionView с аналогичными именами описывают принцип сортировки элементов данных.This is analogous to the way the identically named ListCollectionView properties describe how to sort the data items.

В наиболее распространенных случаях можно использовать два новых статических свойства класса PropertyGroupDescription — CompareNameAscending и CompareNameDescending.Two new static properties of the PropertyGroupDescription class, CompareNameAscending and CompareNameDescending, can be used for the most common cases.

Например, следующий XAML группирует данные по возрасту, сортирует возрастные группы в порядке возрастания и группирует элементы в каждой возрастной группе по фамилии.For example, the following XAML groups data by age, sort the age groups in ascending order, and group the items within each age group by last name.

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

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

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

Поддержка сенсорной клавиатуры позволяет отслеживать фокус в приложениях WPF путем автоматического вызова и отклонения сенсорной клавиатуры в Windows 10 при получении элементом управления, который может принимать текстовые входные данные, сигнала о сенсорном вводе.Touch keyboard support enables focus tracking in WPF applications by automatically invoking and dismissing the touch Keyboard in Windows 10 when the touch input is received by a control that can take textual input.

В предыдущих версиях платформы .NET Framework приложения WPF не использовали отслеживание фокуса без отключения поддержки пера и сенсорного ввода WPF.In previous versions of .NET Framework, WPF applications can't opt into the focus tracking without disabling WPF pen/touch gesture support. В результате приложения WPF должны выбрать между полной поддержкой сенсорного ввода WPF или использованием мыши Windows.As a result, WPF applications must choose between full WPF touch support or rely on Windows mouse promotion.

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

Для поддержки современных сред с высоким и смешанным разрешением платформа WPF в .NET Framework 4.6.2 включает для приложений WPF поддержку DPI для каждого монитора.To support the recent proliferation of high-DPI and hybrid-DPI environments for WPF apps, WPF in the .NET Framework 4.6.2 enables per-monitor awareness. Дополнительные сведения о включении в приложении WPF поддержки DPI для каждого монитора см. в примерах и в руководстве разработчика на сайте GitHub.See the samples and developer guide on GitHub for more information about how to enable your WPF app to become per-monitor DPI aware.

В предыдущих версиях платформы .NET Framework приложения WPF поддерживают DPI на уровне системы.In previous versions of the .NET Framework, WPF apps are system-DPI aware. Другими словами, ОС соответствующим образом масштабирует пользовательский интерфейс приложения в зависимости от разрешения экрана монитора, на котором отображается приложение.In other words, the application's UI is scaled by the OS as appropriate, depending on the DPI of the monitor on which the app is rendered.

Для приложений, работающих под управлением .NET Framework 4.6.2, можно отключить изменения DPI для каждого монитора в приложениях WPF, добавив соответствующую инструкцию в раздел <runtime> файла конфигурации приложения, как показано ниже.For apps running under the .NET Framework 4.6.2, you can disable per-monitor DPI changes in WPF apps by adding a configuration statement to the <runtime> section of your application configuration file, as follows:

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

Windows Workflow Foundation (WF)Windows Workflow Foundation (WF)

В .NET Framework 4.6.2 Windows Workflow Foundation содержит ряд улучшений в следующих областях.In the .NET Framework 4.6.2, Windows Workflow Foundation has been enhanced in the following area:

Поддержка выражений C# и IntelliSense в повторно размещаемом конструкторе WFSupport for C# expressions and IntelliSense in the Rehosted WF Designer

Начиная с .NET Framework 4.5 WF поддерживает выражения C# в конструкторе Visual Studio и рабочих процессах кода.Starting with .NET Framework 4.5, WF supports C# expressions in both the Visual Studio Designer and in code workflows. Повторно размещаемый конструктор рабочих процессов является ключевой возможностью WF, позволяющей размещать конструкторы рабочих процессов в приложении вне среды Visual Studio (например, в WPF).The Rehosted Workflow Designer is a key feature of WF that allows for the Workflow Designer to be in an application outside Visual Studio (for example, in WPF). Windows Workflow Foundation поддерживает выражения C# и IntelliSense в повторно размещаемом конструкторе рабочих процессов.Windows Workflow Foundation provides the ability to support C# expressions and IntelliSense in the Rehosted Workflow Designer. Дополнительные сведения см. в блоге по Windows Workflow Foundation.For more information, see the Windows Workflow Foundation blog.

Availability of IntelliSense when a customer rebuilds a workflow project from Visual Studio. В версиях .NET Framework до 4.6.2 при перестройке проекта рабочего процесса из Visual Studio происходит нарушение работы IntelliSense в конструкторе WF.Availability of IntelliSense when a customer rebuilds a workflow project from Visual Studio In versions of the .NET Framework prior to 4.6.2, WF Designer IntelliSense is broken when a customer rebuilds a workflow project from Visual Studio. Несмотря на успешное построение проекта, типы рабочих процессов отсутствуют в конструкторе, и в окне Список ошибок отображаются предупреждения из IntelliSense о недостающих типах рабочего процесса.While the project build is successful, the workflow types are not found on the designer, and warnings from IntelliSense for the missing workflow types appear in the Error List window. В .NET Framework 4.6.2 эта проблема решена и IntelliSense работает..NET Framework 4.6.2 addresses this issue and makes IntelliSense available.

Приложения Workflow версии 1 с функцией отслеживания рабочего процесса теперь работают в режиме FIPSWorkflow V1 applications with Workflow Tracking on now run under FIPS-mode

Теперь на компьютерах с включенным режимом поддержки стандарта FIPS можно успешно запускать приложение Workflow версии 1 с функцией отслеживания рабочих процессов.Machines with FIPS Compliance Mode enabled can now successfully run a workflow Version 1-style application with Workflow tracking on. Чтобы реализовать этот сценарий, необходимо внести следующее изменение в файл app.config:To enable this scenario, you must make the following change to your app.config file:

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

Если этот сценарий не реализован, запущенное приложение продолжает создавать исключение с сообщением "Данная реализация не является частью протестированных криптографических алгоритмов Windows Platform FIPS".If this scenario is not enabled, running the application continues to generate an exception with the message, "This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms."

Усовершенствования рабочего процесса при использовании динамического обновления с конструктором рабочих процессов Visual StudioWorkflow Improvements when using Dynamic Update with Visual Studio Workflow Designer

Теперь конструктор рабочих процессов, конструктор действия FlowChart и другие конструкторы действий успешно загружают и отображают рабочие процессы, которые были сохранены после вызова метода DynamicUpdateServices.PrepareForUpdate.The Workflow Designer, FlowChart Activity Designer, and other Workflow Activity Designers now successfully load and display workflows that have been saved after calling the DynamicUpdateServices.PrepareForUpdate method. В версиях .NET Framework, предшествующих .NET Framework 4.6.2, загрузка XAML-файла в Visual Studio для рабочего процесса, который был сохранен после вызова метода DynamicUpdateServices.PrepareForUpdate, может вызвать следующие проблемы:In versions of the .NET Framework before .NET Framework 4.6.2, loading a XAML file in Visual Studio for a workflow that has been saved after calling DynamicUpdateServices.PrepareForUpdate can result in the following issues:

  • Конструктор рабочих процессов не может правильно загрузить XAML-файл (если ViewStateData.Id находится в конце строки).The Workflow Designer can't load the XAML file correctly (when the ViewStateData.Id is at the end of the line).

  • Конструктор действия FlowChart или другие конструкторы действий рабочих процессов могут отображать все объекты в их расположениях по умолчанию в отличие от значений вложенных свойств.Flowchart Activity Designer or other Workflow Activity Designers may display all objects in their default locations as opposed to attached property values.

ClickOnceClickOnce

Технология ClickOnce была обновлена для поддержки протоколов TLS 1.1 и TLS 1.2 наряду с уже поддерживаемой версией 1.0.ClickOnce has been updated to support TLS 1.1 and TLS 1.2 in addition to the 1.0 protocol, which it already supports. ClickOnce автоматически определяет необходимый протокол. Для включения поддержки протоколов TLS 1.1 и 1.2 в приложении ClickOnce не требуется выполнять дополнительные действия.ClickOnce automatically detects which protocol is required; no extra steps within the ClickOnce application are required to enable TLS 1.1 and 1.2 support.

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

Теперь Windows предоставляет возможности переноса существующих классических приложений Windows, включая приложения WPF и Windows Forms, на универсальную платформу Windows (UWP).Windows now offers capabilities to bring existing Windows desktop apps, including WPF and Windows Forms apps, to the Universal Windows Platform (UWP). Эта технология играет роль моста, позволяя постепенно переносить существующую базу кода на платформу UWP, переводя, тем самым, приложения на все устройства Windows 10.This technology acts as a bridge by enabling you to gradually migrate your existing code base to UWP, thereby bringing your app to all Windows 10 devices.

Преобразованное классическое приложение получает удостоверение, аналогичное удостоверению приложения платформы UWP, которое делает доступными интерфейсы API UWP для включения функций, таких как динамические плитки и уведомления.Converted desktop apps gain an app identity similar to the app identity of UWP apps, which makes UWP APIs accessible to enable features such as Live Tiles and notifications. Приложение продолжает работать как раньше и функционирует как приложение полного доверия.The app continues to behave as before and runs as a full trust app. После преобразования приложения к существующему процессу полного доверия можно добавить процесс контейнера приложения для подключения адаптивного пользовательского интерфейса.Once the app is converted, an app container process can be added to the existing full trust process to add an adaptive user interface. При перемещении всех функциональных возможностей в процесс контейнера приложения можно удалить процесс полного доверия и сделать новое приложение UWP доступным для всех устройств Windows 10.When all functionality is moved to the app container process, the full trust process can be removed and the new UWP app can be made available to all Windows 10 devices.

Усовершенствования отладкиDebugging improvements

API неуправляемой отладки был усовершенствован в .NET Framework 4.6.2 для выполнения дополнительного анализа при возникновении NullReferenceException, чтобы определить, какая переменная в одной строке исходного кода является null.The unmanaged debugging API has been enhanced in the .NET Framework 4.6.2 to perform additional analysis when a NullReferenceException is thrown so that it is possible to determine which variable in a single line of source code is null. Для поддержки этого сценария в неуправляемый API отладки были добавлены следующие API.To support this scenario, the following APIs have been added to the unmanaged debugging API.

  • Интерфейсы ICorDebugCode4, ICorDebugVariableHome и ICorDebugVariableHomeEnum, предоставляющие собственные начальные расположения управляемых переменных.The ICorDebugCode4, ICorDebugVariableHome, and ICorDebugVariableHomeEnum interfaces, which expose the native homes of managed variables. Это позволяет отладчикам выполнять анализ потока кода при возникновении NullReferenceException и работать в обратном порядке для определения управляемой переменной, соответствующей собственному расположению, которым был null.This enables debuggers to do some code flow analysis when a NullReferenceException occurs and to work backwards to determine the managed variable that corresponds to the native location that was null.

  • Метод ICorDebugType2::GetTypeID обеспечивает сопоставление ICorDebugType с COR_TYPEID, что позволяет отладчику получить COR_TYPEID без экземпляра ICorDebugType.The ICorDebugType2::GetTypeID method provides a mapping for ICorDebugType to COR_TYPEID, which allows the debugger to obtain a COR_TYPEID without an instance of the ICorDebugType. Существующие API в COR_TYPEID можно использовать для определения макета класса типа.Existing APIs on COR_TYPEID can then be used to determine the class layout of the type.

Новые возможности .NET Framework 4.6.1What's new in .NET Framework 4.6.1

Версия .NET Framework 4.6.1 включает новые функции в следующих областях:The .NET Framework 4.6.1 includes new features in the following areas:

Дополнительные сведения о версии .NET Framework 4.6.1 приведены в следующих статьях:For more information on the .NET Framework 4.6.1, see the following topics:

Криптография: Поддержка сертификатов X509, содержащих ECDSACryptography: Support for X509 certificates containing ECDSA

В .NET Framework 4.6 добавлена поддержка RSACng сертификатов X509..NET Framework 4.6 added RSACng support for X509 certificates. В .NET Framework 4.6.1 добавлена поддержка сертификатов X509 с алгоритмом ECDSA (цифровых подписей на основе эллиптических кривых).The .NET Framework 4.6.1 adds support for ECDSA (Elliptic Curve Digital Signature Algorithm) X509 certificates.

ECDSA обеспечивает более высокую производительность и является более безопасным алгоритмом шифрования, чем RSA, предоставляя лучший выбор, когда производительность и масштабируемость TLS представляет собой проблему.ECDSA offers better performance and is a more secure cryptography algorithm than RSA, providing an excellent choice where Transport Layer Security (TLS) performance and scalability is a concern. Реализация .NET Framework создает оболочку для вызовов существующих функциональных возможностей Windows.The .NET Framework implementation wraps calls into existing Windows functionality.

В следующем примере кода показано, как легко создать подпись для байтового потока, используя новую поддержку сертификатов X 509 ECDSA, включенную в .NET Framework 4.6.1.The following example code shows how easy it is to generate a signature for a byte stream by using the new support for ECDSA X509 certificates included in the .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.This offers a marked contrast to the code needed to generate a signature in .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.NETADO.NET

В ADO.NET добавлены следующие возможности.The following have been added to ADO.NET:

Поддержка Always Encrypted (постоянного шифрования) для аппаратно защищенных ключейAlways Encrypted support for hardware protected keys

Теперь ADO.NET поддерживает хранение главных ключей столбца Always Encrypted непосредственно в аппаратных модулях безопасности (HSM).ADO.NET now supports storing Always Encrypted column master keys natively in Hardware Security Modules (HSMs). Благодаря этому клиенты могут использовать асимметричные ключи, хранящиеся в аппаратных модулях безопасности, без необходимости написания специальных поставщиков хранилища главных ключей и их регистрации в приложениях.With this support, customers can leverage asymmetric keys stored in HSMs without having to write custom column master key store providers and registering them in applications.

Для доступа к постоянно зашифрованным данным, защищенным с помощью главных ключей столбца, хранящихся в аппаратном модуле безопасности, клиенты должны установить на серверах приложений или клиентских компьютерах предоставленный производителем аппаратного модуля безопасности поставщик служб шифрования или поставщики хранилища ключей CNG.Customers need to install the HSM vendor-provided CSP provider or CNG key store providers on the app servers or client computers in order to access Always Encrypted data protected with column master keys stored in a HSM.

Улучшенное поведение при подключении MultiSubnetFailover для AlwaysOnImproved MultiSubnetFailover connection behavior for AlwaysOn

SqlClient теперь автоматически обеспечивает более быстрое подключение к группе доступности (AG) AlwaysOn.SqlClient now automatically provides faster connections to an AlwaysOn Availability Group (AG). Он прозрачно определяет, подключается ли ваше приложение к группе доступности AlwaysOn в другой подсети, и быстро обнаруживает текущий активный сервер и обеспечивает подключение к этому серверу.It transparently detects whether your application is connecting to an AlwaysOn availability group (AG) on a different subnet and quickly discovers the current active server and provides a connection to the server. В предыдущих версиях строка подключения приложения должна была включать "MultisubnetFailover=true" для указания, что это приложение подключается к группе доступности AlwaysOn.Prior to this release, an application had to set the connection string to include "MultisubnetFailover=true" to indicate that it was connecting to an AlwaysOn Availability Group. При подключении приложения к группе доступности AlwaysOn без установки значения true для этого ключевого слова подключения время ожидания может быть превышено.Without setting the connection keyword to true, an application might experience a timeout while connecting to an AlwaysOn Availability Group. В этом выпуске больше не требуется, чтобы приложение устанавливало MultiSubnetFailover в значение true.With this release, an application does not need to set MultiSubnetFailover to true anymore. Дополнительные сведения о поддержке SqlClient для групп доступности Always On см. в разделе Поддержка SqlClient для высокого уровня доступности и аварийного восстановления.For more information about SqlClient support for Always On Availability Groups, see SqlClient Support for High Availability, Disaster Recovery.

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

Windows Presentation Foundation содержит ряд улучшений и изменений.Windows Presentation Foundation includes a number of improvements and changes.

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

В .NET Framework 4.6.1 была исправлена задержка при срабатывании событий касания.The delay in firing touch events has been fixed in the .NET Framework 4.6.1. Кроме того, ввод в элементе управления RichTextBox больше не препятствует обрабатывающему потоку при быстром вводе данных.In addition, typing in a RichTextBox control no longer ties up the render thread during fast input.

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

В Windows 8.1 и последующих версиях проверка орфографии в WPF была обновлена, чтобы для проверки орфографии в дополнительных языках использовалась поддержка операционной системы.The spell checker in WPF has been updated on Windows 8.1 and later versions to leverage operating system support for spell-checking additional languages. В версиях Windows, предшествующих Windows 8.1, изменения этой функциональности отсутствуют.There is no change in functionality on Windows versions prior to Windows 8.1.

Как и в предыдущих версиях .NET Framework, язык для блока RichTextBox элемента управления TextBox определяется путем поиска информации в следующем порядке:As in previous versions of the .NET Framework, the language for a TextBox control ora RichTextBox block is detected by looking for information in the following order:

  • xml:lang, если имеется;xml:lang, if it is present.

  • текущий язык ввода;Current input language.

  • язык и региональные параметры текущего потока.Current thread culture.

Дополнительные сведения о языковой поддержке в WPF см. в публикации в блоге WPF, посвященной компонентам .NET Framework 4.6.1.For more information on language support in WPF, see the WPF blog post on .NET Framework 4.6.1 features.

Дополнительная поддержка индивидуально настраиваемых словарейAdditional support for per-user custom dictionaries

В .NET Framework 4.6.1 WPF распознает настраиваемые словари, зарегистрированные глобально.In .NET Framework 4.6.1, WPF recognizes custom dictionaries that are registered globally. Эта возможность доступна наряду с возможностью их регистрации на уровне элемента управления.This capability is available in addition to the ability to register them per-control.

В предыдущих версиях WPF настраиваемые словари не распознавали исключенные слова и списки автозамены.In previous versions of WPF, custom dictionaries did not recognize Excluded Words and AutoCorrect lists. Эти возможности поддерживаются в Windows 8.1 и Windows 10 благодаря использованию файлов, которые могут быть помещены в каталог %AppData%\Microsoft\Spelling\<language tag>.They are supported on Windows 8.1 and Windows 10 through the use of files that can be placed under the %AppData%\Microsoft\Spelling\<language tag> directory. К этим файлам применяются следующие правила.The following rules apply to these files:

  • Файлы должны иметь расширения DIC (для добавленных слов), EXC (для исключенных слов) или ACL (для автозамены).The files should have extensions of .dic (for added words), .exc (for excluded words), or .acl (for AutoCorrect).

  • Файлы должны представлять собой открытый текст в кодировке UTF-16 LE, который начинается с метки порядка байтов (BOM).The files should be UTF-16 LE plaintext that starts with the Byte Order Mark (BOM).

  • Каждая строка должна состоять из слова (в списках добавленных или исключенных слов) или пары автозамены, в которой слова разделены вертикальной чертой ("|") (в списке автозамены).Each line should consist of a word (in the added and excluded word lists), or an autocorrect pair with the words separated by a vertical bar ("|") (in the AutoCorrect word list).

  • Эти файлы считаются доступными только для чтения и не изменяются системой.These files are considered read-only and are not modified by the system.

Примечание

Эти новые форматы файлов не поддерживаются непосредственно API-интерфейсами проверки орфографии WPF, и настраиваемые словари, передаваемые в WPF в приложениях, должны продолжать использовать LEX-файлы.These new file-formats are not directly supported by the WPF spell checking APIs, and the custom dictionaries supplied to WPF in applications should continue to use .lex files.

ПримерыSamples

Ряд примеров для WPF доступен в GitHub-репозитории Microsoft/WPF-Samples.There are a number of WPF samples on the Microsoft/WPF-Samples GitHub repository. Помогите нам улучшить наши примеры, отправив нам запрос на включение внесенных изменений или открыв вопрос GitHub.Help us improve our samples by sending us a pull-request or opening a GitHub issue.

Расширения DirectXDirectX extensions

WPF включает пакет NuGet, предоставляющий новые реализации D3DImage, которые упрощают взаимодействие с содержимым DX10 и Dx11.WPF includes a NuGet package that provides new implementations of D3DImage that make it easy for you to interoperate with DX10 and Dx11 content. Код для этого пакета открыт и доступен на GitHub.The code for this package has been open sourced and is available on GitHub.

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

Метод Transaction.EnlistPromotableSinglePhase теперь может использовать для повышения уровня транзакции диспетчер распределенных транзакций, отличный от MSDTC.The Transaction.EnlistPromotableSinglePhase method can now use a distributed transaction manager other than MSDTC to promote the transaction. Это делается путем указания идентификатора GUID диспетчера транзакций в новую перегрузку Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid).You do this by specifying a GUID transaction promoter identifier to the new Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) overload . В случае успешного выполнения операции на возможности транзакции накладываются определенные ограничения.If this operation is successful, there are limitations placed on the capabilities of the transaction. После прикрепления отличного от MSDTC диспетчера транзакций следующие методы вызывают исключение TransactionPromotionException, так как эти методы требуют повышения до MSDTC.Once a non-MSDTC transaction promoter is enlisted, the following methods throw a TransactionPromotionException because these methods require promotion to MSDTC:

После прикрепления отличного от MSDTC диспетчера транзакций он должен использоваться для будущих долговременных прикреплений с использованием протоколов, которые он задает.Once a non-MSDTC transaction promoter is enlisted, it must be used for future durable enlistments by using protocols that it defines. Идентификатор Guid диспетчера транзакций можно получить с помощью свойства PromoterType.The Guid of the transaction promoter can be obtained by using the PromoterType property. Когда выполняется повышение уровня транзакции, диспетчер транзакций предоставляет массив Byte, представляющий токен повышенного уровня.When the transaction promotes, the transaction promoter provides a Byte array that represents the promoted token. Приложение может получить этот токен повышенного уровня для транзакции, уровень которой повышается отличным от MSDTC диспетчером транзакций, с помощью метода GetPromotedToken.An application can obtain the promoted token for a non-MSDTC promoted transaction with the GetPromotedToken method.

Пользователи новой перегрузки Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) должны придерживаться определенной последовательности вызовов для успешного завершения операции повышения уровня.Users of the new Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) overload must follow a specific call sequence in order for the promotion operation to complete successfully. Эти правила описаны в документации по данному методу.These rules are documented in the method's documentation.

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

В API-интерфейс неуправляемого профилирования внесены следующие изменения.The unmanaged profiling API has been enhanced as follows:

  • Улучшена поддержка доступа к PDB-файлам в интерфейсе ICorProfilerInfo7.Better support for accessing PDBs in the ICorProfilerInfo7 interface.

    В ASP.NET Core сборки все чаще компилируются в памяти с использованием Roslyn.In ASP.NET Core, it is becoming much more common for assemblies to be compiled in-memory by Roslyn. Для разработчиков средств профилирования это означает, что PDB-файлы, которые ранее были сериализованы на диске, могут больше не присутствовать.For developers making profiling tools, this means that PDBs that historically were serialized on disk may no longer be present. Средства профилирования часто используют PDB-файлы для сопоставления кода с исходными строками для таких задач, как анализ покрытия кода или построковый анализ производительности.Profiler tools often use PDBs to map code back to source lines for tasks such as code coverage or line-by-line performance analysis. Интерфейс ICorProfilerInfo7 теперь включает два новых метода, ICorProfilerInfo7::GetInMemorySymbolsLength и ICorProfilerInfo7::ReadInMemorySymbols, для предоставления этим средствам профилирования доступа к данным PDB-файлов в памяти. С помощью новых API профилировщик может получить содержимое PDB-файлов в памяти в виде массива байтов, а затем обработать его или сериализовать на диск.The ICorProfilerInfo7 interface now includes two new methods, ICorProfilerInfo7::GetInMemorySymbolsLength and ICorProfilerInfo7::ReadInMemorySymbols, to provide these profiler tools with access to the in-memory PDB data, By using the new APIs, a profiler can obtain the contents of an in-memory PDB as a byte array and then process it or serialize it to disk.

  • Улучшено инструментирование с использованием интерфейса ICorProfiler.Better instrumentation with the ICorProfiler interface.

    Профилировщики, использующие функциональность ReJit API ICorProfiler для динамического инструментирования, теперь могут изменять некоторые метаданные.Profilers that are using the ICorProfiler APIs ReJit functionality for dynamic instrumentation can now modify some metadata. Ранее такие средства могли инструментировать IL в любое время, но метаданные могли изменяться только во время загрузки модуля.Previously such tools could instrument IL at any time, but metadata could only be modified at module load time. Поскольку IL ссылается на метаданные, это ограничивает типы инструментирования, которое может выполняться.Because IL refers to metadata, this limited the kinds of instrumentation that could be done. Мы отменили некоторые из этих ограничений, добавив метод ICorProfilerInfo7::ApplyMetaData для поддержки подмножества правок метаданных после загрузки модуля, в частности путем добавления новых записей AssemblyRef, TypeRef, TypeSpec, MemberRef, MemberSpec и UserString.We have lifted some of those limits by adding the ICorProfilerInfo7::ApplyMetaData method to support a subset of metadata edits after the module loads, in particular by adding new AssemblyRef, TypeRef, TypeSpec, MemberRef, MemberSpec, and UserString records. Это изменение существенно расширяет спектр возможного динамического инструментирования.This change makes a much broader range of on-the-fly instrumentation possible.

PDB-файлы генератора образов в машинном коде (NGEN)Native Image Generator (NGEN) PDBs

Трассировка событий между компьютерами позволяет клиентам профилировать программу на компьютере А и просматривать данные профилирования с сопоставлением исходных строк на компьютере Б. Используя предыдущие версии .NET Framework, пользователь может копировать все модули и образы в машинном коде из профилируемого компьютера на компьютер анализа, содержащий PDB-файл IL, для создания сопоставления "источник-машинный код".Cross-machine event tracing allows customers to profile a program on Machine A and look at the profiling data with source line mapping on Machine B. Using previous versions of the .NET Framework, the user would copy all the modules and native images from the profiled machine to the analysis machine that contains the IL PDB to create the source-to-native mapping. Хотя этот процесс может хорошо работать в том случае, если файлы относительно невелики, например для телефонных приложений, на настольных системах эти файлы могут быть очень большими, и на их копирование потребуется значительное время.While this process may work well when the files are relatively small, such as for phone applications, the files can be very large on desktop systems and require significant time to copy.

С помощью PDB-файлов Ngen NGen может создать PDB-файл, содержащий сопоставления "IL-машинный код" без зависимости от PDB-файла IL.With Ngen PDBs, NGen can create a PDB that contains the IL-to-native mapping without a dependency on the IL PDB. В нашем сценарии трассировки событий между компьютерами все, что требуется, — это скопировать PDB-файл образа в машинном коде, созданный на компьютере А, на компьютер Б, а затем использовать API доступа к интерфейсу отладки для чтения сопоставления "машинный код-IL" PDB-файла IL и сопоставления "IL-машинный код" PDB-файла образа в машинном коде.In our cross-machine event tracing scenario, all that is needed is to copy the native image PDB that is generated by Machine A to Machine B and to use Debug Interface Access APIs to read the IL PDB's source-to-IL mapping and the native image PDB's IL-to-native mapping. Объединение обоих сопоставлений обеспечивает сопоставление "источник-машинный код".Combining both mappings provides a source-to-native mapping. Поскольку PDB-файл образа в машинном коде PDB намного меньше, чем все модули и образы в машинном коде, процесс копирования с компьютера А на компьютер Б выполняется гораздо быстрее.Since the native image PDB is much smaller than all the modules and native images, the process of copying from Machine A to Machine B is much faster.

Новые возможности .NET 2015What's new in .NET 2015

.NET 2015 включает .NET Framework 4.6 и .NET Core..NET 2015 introduces the .NET Framework 4.6 and .NET Core. Некоторые функции применяются к обеим версиям, а некоторые только к .NET Framework 4.6 или .NET Core.Some new features apply to both, and other features are specific to .NET Framework 4.6 or .NET Core.

  • ASP.NET CoreASP.NET Core

    .NET 2015 включает ASP.NET Core — экономичную реализацию .NET для создания современных облачных приложений..NET 2015 includes ASP.NET Core, which is a lean .NET implementation for building modern cloud-based apps. Платформа ASP.NET Core является модульной, поэтому вы можете включить только те функции, которые нужны в вашем приложении.ASP.NET Core is modular so you can include only those features that are needed in your application. Она может быть размещена в IIS или резидентно в пользовательском процессе, и вы можете запустить приложения с разными версиями .NET Framework на одном сервере.It can be hosted on IIS or self-hosted in a custom process, and you can run apps with different versions of the .NET Framework on the same server. В нее входит новая система конфигурации среды, предназначенная для развертывания облака.It includes a new environment configuration system that is designed for cloud deployment.

    MVC, веб-API и веб-страницы объединены в одну платформу, которая называется MVC 6.MVC, Web API, and Web Pages are unified into a single framework called MVC 6. Сборка приложений ASP.NET Core выполняется с помощью инструментов Visual Studio 2015 или более поздних версий.You build ASP.NET Core apps through tools in Visual Studio 2015 or later. Уже существующие приложения будут работать на новой платформе .NET Framework, однако для сборки приложения, использующего MVC 6 или SignalR 3, необходима система проектов Visual Studio 2015 и последующих выпусков.Your existing applications will work on the new .NET Framework; however to build an app that uses MVC 6 or SignalR 3, you must use the project system in Visual Studio 2015 or later.

    См. дополнительные сведения об ASP.NET Core.For information, see ASP.NET Core.

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

    • API на основе задач для асинхронной очистки ответовTask-based API for Asynchronous Response Flushing

      ASP.NET теперь предоставляет простой API на основе задач для асинхронной очистки ответов, HttpResponse.FlushAsync, который позволяет асинхронно сбрасывать ответы, используя поддержку операторов async/await языка программирования.ASP.NET now provides a simple task-based API for asynchronous response flushing, HttpResponse.FlushAsync, that allows responses to be flushed asynchronously by using your language's async/await support.

    • Привязка модели поддерживает методы, возвращающие задачиModel binding supports task-returning methods

      В версии .NET Framework 4.5 в ASP.NET добавлена функция привязки модели, которая обеспечивает расширяемый, ориентированный на код подход к операциям с данными CRUD на страницах веб-форм и пользовательских элементов управления.In the .NET Framework 4.5, ASP.NET added the Model Binding feature that enabled an extensible, code-focused approach to CRUD-based data operations in Web Forms pages and user controls. Система привязки модели теперь поддерживает возвращающие Task методы привязки модели.The Model Binding system now supports Task-returning model binding methods. Эта функция позволяет разработчикам веб-форм сочетать преимущества масштабируемости асинхронного программирования с простотой системы привязки данных при использовании более новых версий моделей ORM, включая Entity Framework.This feature allows Web Forms developers to get the scalability benefits of async with the ease of the data-binding system when using newer versions of ORMs, including the Entity Framework.

      Асинхронная привязка модели управляется параметром конфигурации aspnet:EnableAsyncModelBinding.Async model binding is controlled by the aspnet:EnableAsyncModelBinding configuration setting.

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

      Для приложений, предназначенных для .NET Framework 4.6, по умолчанию используется значение true.On apps the target the .NET Framework 4.6, it defaults to true. Для приложений, выполняющихся в .NET Framework 4.6, но предназначенных для более ранних версий .NET Framework, по умолчанию используется значение false.On apps running on the .NET Framework 4.6 that target an earlier version of the .NET Framework, it is false by default. Включить этот режим можно, задав для параметра конфигурации значение true.It can be enabled by setting the configuration setting to true.

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

      HTTP/2 — это новая версия протокола HTTP, которая обеспечивает более эффективное подключение (меньшее число круговых путей между клиентом и сервером) и уменьшение задержки при загрузке веб-страницы для пользователей.HTTP/2 is a new version of the HTTP protocol that provides much better connection utilization (fewer round-trips between client and server), resulting in lower latency web page loading for users. HTTP/2 обеспечивает максимальное преимущество для веб-страниц (по сравнению со службами), так как оптимизирует запрос различных артефактов в ходе одной операции.Web pages (as opposed to services) benefit the most from HTTP/2, since the protocol optimizes for multiple artifacts being requested as part of a single experience. В .NET Framework 4.6 добавлена поддержка HTTP/2 в ASP.NET.HTTP/2 support has been added to ASP.NET in .NET Framework 4.6. Так как сетевые функции существуют на нескольких уровнях, для новых компонентов в Windows, IIS и ASP.NET потребовалось включить HTTP/2.Because networking functionality exists at multiple layers, new features were required in Windows, in IIS, and in ASP.NET to enable HTTP/2. Для использования HTTP/2 с ASP.NET приложение должно выполняться в Windows 10.You must be running on Windows 10 to use HTTP/2 with ASP.NET.

      Протокол HTTP/2 также поддерживается и включен по умолчанию для приложений универсальной платформы Windows (UWP) для Windows 10, использующих API System.Net.Http.HttpClient.HTTP/2 is also supported and on by default for Windows 10 Universal Windows Platform (UWP) apps that use the System.Net.Http.HttpClient API.

      Чтобы обеспечить способ использования компонента PUSH_PROMISE в приложениях ASP.NET, в класс HttpResponse добавлен новый метод с двумя перегрузками, PushPromise(String) и PushPromise(String, String, NameValueCollection).In order to provide a way to use the PUSH_PROMISE feature in ASP.NET applications, a new method with two overloads, PushPromise(String) and PushPromise(String, String, NameValueCollection), has been added to the HttpResponse class.

      Примечание

      Хотя ASP.NET Core поддерживает HTTP/2, поддержка функции PUSH PROMISE пока не добавлена.While ASP.NET Core supports HTTP/2, support for the PUSH PROMISE feature has not yet been added.

      Всю работу выполняют браузер и веб-сервер (IIS в Windows).The browser and the web server (IIS on Windows) do all the work. Нет необходимости перекладывать нагрузку на пользователей.You don't have to do any heavy-lifting for your users.

      Большинство основных браузеров поддерживает HTTP/2, поэтому вполне вероятно, что пользователи смогут воспользоваться преимуществами протокола HTTP/2, если его поддерживает ваш сервер.Most of the major browsers support HTTP/2, so it's likely that your users will benefit from HTTP/2 support if your server supports it.

    • Поддержка протокола привязки токеновSupport for the Token Binding Protocol

      Корпорация Майкрософт и Google совместно работают над созданием нового подхода к проверке подлинности, называемого протоколом привязки токенов, или Token Binding Protocol.Microsoft and Google have been collaborating on a new approach to authentication, called the Token Binding Protocol. Предполагается, что токены проверки подлинности (в кэше браузера) могут быть украдены и использованы злоумышленниками для получения доступа к защищенным в иных обстоятельствах ресурсам (например, к вашему банковскому счету) без помощи пароля или других конфиденциальных сведений.The premise is that authentication tokens (in your browser cache) can be stolen and used by criminals to access otherwise secure resources (for example, your bank account) without requiring your password or any other privileged knowledge. Новый протокол предназначен для устранения этой проблемы.The new protocol aims to mitigate this problem.

      Протокол привязки токенов будет реализован в Windows 10 в качестве компонента браузера.The Token Binding Protocol will be implemented in Windows 10 as a browser feature. Приложения ASP.NET будут участвовать в протоколе для подтверждения действительности токенов проверки подлинности.ASP.NET apps will participate in the protocol, so that authentication tokens are validated to be legitimate. Реализации клиента и сервера будут обеспечивать комплексную защиту, заданную этим протоколом.The client and the server implementations establish the end-to-end protection specified by the protocol.

    • Алгоритм случайного хэширования строкRandomized string hash algorithms

      В .NET Framework 4.5 добавлен алгоритм случайного хэширования строк..NET Framework 4.5 introduced a randomized string hash algorithm. Однако он не поддерживается ASP.NET, так как некоторые компоненты ASP.NET зависят от стабильного хэш-кода.However, it was not supported by ASP.NET because of some ASP.NET features depended on a stable hash code. В .NET Framework 4.6 теперь поддерживаются алгоритмы случайного хэширования строк.In .NET Framework 4.6, randomized string hash algorithms are now supported. Чтобы включить эту функцию, используйте параметр конфигурации aspnet:UseRandomizedStringHashAlgorithm.To enable this feature, use the aspnet:UseRandomizedStringHashAlgorithm config setting.

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

    ADO .NET теперь поддерживает функцию «Всегда зашифровано», которая доступна в CTP-версии 2 SQL Server 2016.ADO .NET now supports the Always Encrypted feature available in SQL Server 2016 Community Technology Preview 2 (CTP2). Благодаря функции «Всегда зашифровано» SQL Server может выполнять операции с зашифрованными данными, и, что важнее всего, ключ шифрования хранится в самом приложении в доверенной среде клиента, а не на сервере.With Always Encrypted, SQL Server can perform operations on encrypted data, and best of all the encryption key resides with the application inside the customer’s trusted environment and not on the server. Функция «Всегда зашифровано» защищает данные клиента, поэтому администраторы базы данных не имеют доступа к данным в формате обычного текста.Always Encrypted secures customer data so DBAs do not have access to plain text data. Шифрование и расшифровка данных происходит прозрачно на уровне драйвера, что сводит к минимуму изменения, которые должны быть выполнены для существующих приложений.Encryption and decryption of data happens transparently at the driver level, minimizing changes that have to be made to existing applications. Дополнительные сведения см. в разделах Always Encrypted (ядро СУБД) и Постоянное шифрование (разработка клиентских приложений).For details, see Always Encrypted (Database Engine) and Always Encrypted (client development).

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

    В .NET Framework 4.6 представлена новая версия 64-разрядного JIT-компилятора (исходное кодовое имя — RyuJIT)..NET Framework 4.6 features a new version of the 64-bit JIT compiler (originally code-named RyuJIT). Новый 64-разрядный компилятор имеет значительно большую производительность, чем предыдущий 64-разрядный JIT-компилятор.The new 64-bit compiler provides significant performance improvements over the older 64-bit JIT compiler. Новый 64-разрядный компилятор включен для 64-разрядных процессов, выполняющихся на основе .NET Framework 4.6.The new 64-bit compiler is enabled for 64-bit processes running on top of .NET Framework 4.6. Приложение будет работать в 64-разрядном процессе, если оно скомпилировано как 64-разрядное или AnyCPU и выполняется в 64-разрядной операционной системе.Your app will run in a 64-bit process if it is compiled as 64-bit or AnyCPU and is running on a 64-bit operating system. Хотя приняты все необходимые меры, чтобы обеспечить как можно более прозрачный переход на новый компилятор, возможны изменения в поведении.While care has been taken to make the transition to the new compiler as transparent as possible, changes in behavior are possible.

    Новый 64-разрядный JIT-компилятор также включает функции аппаратного ускорения SIMD при работе с типами с поддержкой SIMD в пространстве имен System.Numerics, что может обеспечить неплохое повышение производительности.The new 64-bit JIT compiler also includes hardware SIMD acceleration features when coupled with SIMD-enabled types in the System.Numerics namespace, which can yield good performance improvements.

  • Усовершенствования загрузчика сборокAssembly loader improvements

    Загрузчик сборок теперь более эффективно использует память благодаря выгрузке сборок IL после загрузки соответствующего образа NGEN.The assembly loader now uses memory more efficiently by unloading IL assemblies after a corresponding NGEN image is loaded. Это изменение снижает использование виртуальной памяти, что особенно полезно для больших 32-разрядных приложений (например, Visual Studio); кроме того, оно обеспечивает экономию физической памяти.This change decreases virtual memory, which is particularly beneficial for large 32-bit apps (such as Visual Studio), and also saves physical memory.

  • Изменения библиотеки с базовым классомBase class library changes

    В .NET Framework 4.6 были добавлены многие новые API для поддержки важных сценариев.Many new APIs have been added around to .NET Framework 4.6 to enable key scenarios. Внесены следующие изменения и дополнения.These include the following changes and additions:

    • Реализации IReadOnlyCollection<T>IReadOnlyCollection<T> implementations

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

    • CultureInfo.CurrentCulture и CultureInfo.CurrentUICultureCultureInfo.CurrentCulture and CultureInfo.CurrentUICulture

      Свойства CultureInfo.CurrentCulture и CultureInfo.CurrentUICulture теперь доступны для чтения и записи, а не только для чтения.The CultureInfo.CurrentCulture and CultureInfo.CurrentUICulture properties are now read-write rather than read-only. При назначении нового объекта CultureInfo этим свойствам язык и региональные параметры текущего потока, определенные свойством Thread.CurrentThread.CurrentCulture, и язык и региональные параметры текущего потока пользовательского интерфейса, определенные свойствами Thread.CurrentThread.CurrentUICulture, также изменяются.If you assign a new CultureInfo object to these properties, the current thread culture defined by the Thread.CurrentThread.CurrentCulture property and the current UI thread culture defined by the Thread.CurrentThread.CurrentUICulture properties also change.

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

      Класс GC теперь включает методы TryStartNoGCRegion и EndNoGCRegion, которые позволяют запретить сбор мусора во время выполнения критического пути.The GC class now includes TryStartNoGCRegion and EndNoGCRegion methods that allow you to disallow garbage collection during the execution of a critical path.

      Новая перегрузка метода GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) позволяет контролировать, выполняется ли очистка и сжатие кучи мелких объектов и кучи больших объектов или только очистка.A new overload of the GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) method allows you to control whether both the small object heap and the large object heap are swept and compacted or swept only.

    • Типы с поддержкой SIMDSIMD-enabled types

      Пространство имен System.Numerics теперь включает различные типы с поддержкой SIMD, например Matrix3x2, Matrix4x4, Plane, Quaternion, Vector2, Vector3 и Vector4.The System.Numerics namespace now includes a number of SIMD-enabled types, such as Matrix3x2, Matrix4x4, Plane, Quaternion, Vector2, Vector3, and Vector4.

      Поскольку новый 64-разрядный JIT-компилятор также включает функции аппаратного ускорения SIMD, особенно значительное повышение производительности обеспечивается при использовании типов с поддержкой SIMD с новым 64-разрядным JIT-компилятором.Because the new 64-bit JIT compiler also includes hardware SIMD acceleration features, there are especially significant performance improvements when using the SIMD-enabled types with the new 64-bit JIT compiler.

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

      API System.Security.Cryptography обновляется для поддержки API шифрования CNG Windows.The System.Security.Cryptography API is being updated to support the Windows CNG cryptography APIs. Предыдущие версии .NET Framework полностью зависели от более ранних версий API шифрования Windows для реализации System.Security.Cryptography.Previous versions of the .NET Framework have relied entirely on an earlier version of the Windows Cryptography APIs as the basis for the System.Security.Cryptography implementation. Мы получали много запросов на реализацию поддержки API CNG, так как он поддерживает современные алгоритмы шифрования, что очень важно для некоторых категорий приложений.We have had requests to support the CNG API, since it supports modern cryptography algorithms, which are important for certain categories of apps.

      В .NET Framework 4.6 добавлены следующие новые улучшения для поддержки API шифрования CNG Windows:.NET Framework 4.6 includes the following new enhancements to support the Windows CNG cryptography APIs:

      • Набор методов расширения для сертификатов 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 (по возможности).A set of extension methods for X509 Certificates, System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2) and System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2), that return a CNG-based implementation rather than a CAPI-based implementation when possible. (Некоторые смарт-карты и т. д. по-прежнему требуют CAPI, и API-интерфейсы обрабатывают резервный вариант.)(Some smartcards, etc., still require CAPI, and the APIs handle the fallback).

      • Класс System.Security.Cryptography.RSACng, который обеспечивает реализацию CNG алгоритма RSA.The System.Security.Cryptography.RSACng class, which provides a CNG implementation of the RSA algorithm.

      • Улучшения API RSA, позволяющие отказаться от обязательного приведения общих действий.Enhancements to the RSA API so that common actions no longer require casting. Например, для шифрования данных с помощью объекта X509Certificate2 в предыдущих версиях платформы .NET Framework требуется код, аналогичный следующему.For example, encrypting data using an X509Certificate2 object requires code like the following in previous versions of the .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, можно переписать следующим образом, чтобы избежать приведения.Code that uses the new cryptography APIs in .NET Framework 4.6 can be rewritten as follows to avoid the cast.

        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 и обратноSupport for converting dates and times to or from Unix time

      Следующие новые методы были добавлены в структуру DateTimeOffset для поддержки преобразования значений даты и времени в формат Unix или из него.The following new methods have been added to the DateTimeOffset structure to support converting date and time values to or from Unix time:

    • Параметры совместимостиCompatibility switches

      Класс AppContext добавляет новый компонент совместимости, который позволяет авторам библиотек предоставлять согласованный механизм явного отказа для новых функциональных возможностей.The AppContext class adds a new compatibility feature that enables library writers to provide a uniform opt-out mechanism for new functionality for their users. Он устанавливает слабо связанный контракт между компонентами для передачи запроса на явный отказ.It establishes a loosely coupled contract between components in order to communicate an opt-out request. Эта возможность обычно важна при внесении изменений в существующие функции.This capability is typically important when a change is made to existing functionality. В свою очередь, режим неявного согласия для новых функциональных возможностей уже существует.Conversely, there is already an implicit opt-in for new functionality.

      В AppContext библиотеки определяют и предоставляют параметры совместимости, а код, который от них зависит, может устанавливать эти параметры для влияния на поведение библиотек.With AppContext, libraries define and expose compatibility switches, while code that depends on them can set those switches to affect the library behavior. По умолчанию библиотеки предоставляют новые функции и изменяют их (то есть предоставляют прежние функции) только в том случае, если установлен параметр.By default, libraries provide the new functionality, and they only alter it (that is, they provide the previous functionality) if the switch is set.

      Приложение (или библиотека) может объявить значение параметра (который всегда имеет значение Boolean), определяемое зависимой библиотекой.An application (or a library) can declare the value of a switch (which is always a Boolean value) that a dependent library defines. Параметр всегда имеет неявное значение false.The switch is always implicitly false. Установка значения true для параметра включает его.Setting the switch to true enables it. Явно задание значения false для параметра определяет новое поведение.Explicitly setting the switch to false provides the new behavior.

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

      Библиотека должна проверить, объявил ли потребитель значение параметра, а затем выполнить соответствующие действия.The library must check if a consumer has declared the value of the switch and then appropriately act on it.

      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
      

      Рекомендуется использовать согласованный формат параметров, так как они представляют собой формальный контракт, предоставляемый библиотекой.It's beneficial to use a consistent format for switches, since they are a formal contract exposed by a library. Ниже приведены два очевидных формата:The following are two obvious formats.

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

      • параметр.библиотека.имя_параметраSwitch.library.switchname

    • Изменения асинхронной модели на основе задачChanges to the task-based asynchronous pattern (TAP)

      Для приложений, предназначенных для .NET Framework 4.6, объекты Task и Task<TResult> наследуют язык и региональные параметры, а также язык и региональные параметры интерфейса пользователя вызывающего потока.For apps that target the .NET Framework 4.6, Task and Task<TResult> objects inherit the culture and UI culture of the calling thread. Поведение приложений на предыдущих версиях платформы .NET Framework или без определенной версии .NET Framework не затрагивается.The behavior of apps that target previous versions of the .NET Framework, or that do not target a specific version of the .NET Framework, is unaffected. Дополнительные сведения см. в подразделе "Язык и региональные параметры в асинхронных операциях на основе задач" раздела, посвященного классу CultureInfo.For more information, see the "Culture and task-based asynchronous operations" section of the CultureInfo class topic.

      Класс System.Threading.AsyncLocal<T> позволяет представлять внешние данные, локальные для данного асинхронного потока управления, такие как метод async.The System.Threading.AsyncLocal<T> class allows you to represent ambient data that is local to a given asynchronous control flow, such as an async method. Его можно использовать для сохранения данных в разных потоках.It can be used to persist data across threads. Кроме того, можно определить метод обратного вызова, который получает уведомление при каждом изменении внешних данных из-за явного изменения свойства AsyncLocal<T>.Value или из-за перехода контекста в потоке.You can also define a callback method that is notified whenever the ambient data changes either because the AsyncLocal<T>.Value property was explicitly changed, or because the thread encountered a context transition.

      Три удобных метода, Task.CompletedTask, Task.FromCanceled и Task.FromException, добавлены в асинхронную модель на основе задач (TAP) для возврата завершенных задач в определенном состоянии.Three convenience methods, Task.CompletedTask, Task.FromCanceled, and Task.FromException, have been added to the task-based asynchronous pattern (TAP) to return completed tasks in a particular state.

      Теперь класс NamedPipeClientStream поддерживает асинхронное взаимодействие с новым методом ConnectAsync.The NamedPipeClientStream class now supports asynchronous communication with its new ConnectAsync. метод.method.

    • EventSource теперь поддерживает запись в журнал событийEventSource now supports writing to the Event log

      Теперь класс EventSource можно использовать для регистрации в журнале событий административных сообщений или рабочих сообщений в дополнение ко всем существующим сеансам трассировки событий Windows, созданным на компьютере.You now can use the EventSource class to log administrative or operational messages to the event log, in addition to any existing ETW sessions created on the machine. Раньше для обеспечения этих функций приходилось использовать пакет Microsoft.Diagnostics.Tracing.EventSource NuGet.In the past, you had to use the Microsoft.Diagnostics.Tracing.EventSource NuGet package for this functionality. Эта функция теперь встроена в .NET Framework 4.6.This functionality is now built-into .NET Framework 4.6.

      Обновления пакета NuGet и .NET Framework 4.6 включают следующие функции:Both the NuGet package and .NET Framework 4.6 have been updated with the following features:

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

        Возможность определения событий "на лету" без создания методов событий.Allows events defined "on the fly" without creating event methods.

      • Разнородные полезные данныеRich payloads

        Возможность передавать массивы и классы со специальными атрибутами, а также типы-примитивы в качестве полезных данных.Allows specially attributed classes and arrays as well as primitive types to be passed as a payload

      • Отслеживание действийActivity tracking

        События Start и Stop помечают возникающие между ними события идентификатором, который представляет все текущие активные действия.Causes Start and Stop events to tag events between them with an ID that represents all currently active activities.

      Для поддержки этих функций перегруженный метод Write был добавлен в класс EventSource.To support these features, the overloaded Write method has been added to the EventSource class.

  • Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

    • Усовершенствования HDPIHDPI improvements

      В .NET Framework 4.6 улучшена поддержка HDPI в WPF.HDPI support in WPF is now better in the .NET Framework 4.6. В округление макетов внесены изменения для снижения числа вхождений обрезки в элементах управления с границами.Changes have been made to layout rounding to reduce instances of clipping in controls with borders. По умолчанию эта функция включена, только если для атрибута TargetFrameworkAttribute задано значение .NET 4.6.By default, this feature is enabled only if your TargetFrameworkAttribute is set to .NET 4.6. Для приложений, которые предназначены для более ранних версий платформы, но выполняются в .NET Framework 4.6, новое поведение можно активировать отдельно, добавив следующую строку в раздел <runtime> файла app.config:Applications that target earlier versions of the framework but are running on the .NET Framework 4.6 can opt in to the new behavior by adding the following line to the <runtime> section of the app.config file:

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

      Окна WPF, разнесенные на несколько мониторов с разными параметрами DPI (настройка нескольких параметров разрешения), теперь отображаются полностью, без черных областей.WPF windows straddling multiple monitors with different DPI settings (Multi-DPI setup) are now completely rendered without blacked-out regions. Можно отключить это новое поведение, добавив следующую строку в раздел <appSettings> файла app.config.You can opt out of this behavior by adding the following line to the <appSettings> section of the app.config file to disable this new behavior:

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

      Поддержка автоматической загрузки правого курсора в зависимости от параметров DPI добавлена в System.Windows.Input.Cursor.Support for automatically loading the right cursor based on DPI setting has been added to System.Windows.Input.Cursor.

    • Улучшено касаниеTouch is better

      В .NET Framework 4.6 решена проблема с касанием, приводившим к непредсказуемому поведению, о которой сообщает клиент на веб-сайте Connect.Customer reports on Connect that touch produces unpredictable behavior have been addressed in the .NET Framework 4.6. Пороговое значение двойного касания для приложений Магазина Windows и приложений WPF теперь одинаково в Windows 8.1 и более поздних версий.The double tap threshold for Windows Store applications and WPF applications is now the same in Windows 8.1 and above.

    • Поддержка прозрачных дочерних оконTransparent child window support

      WPF в .NET Framework 4.6 поддерживает прозрачные дочерние окна в Windows 8.1 и более поздних версий.WPF in the .NET Framework 4.6 supports transparent child windows in Windows 8.1 and above. Это позволяет создавать непрямоугольные и прозрачные дочерние окна в окнах верхнего уровня.This allows you to create non-rectangular and transparent child windows in your top-level windows. Чтобы включить эту функцию, необходимо задать для свойства HwndSourceParameters.UsesPerPixelTransparency значение true.You can enable this feature by setting the HwndSourceParameters.UsesPerPixelTransparency property to true.

  • Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)

    • Поддержка SSLSSL support

      Теперь WCF помимо SSL 3.0 и TLS 1.0 поддерживает SSL-версии TLS 1.1 и TLS 1.2 при использовании NetTcp с безопасностью транспорта и проверкой подлинности клиента.WCF now supports SSL version TLS 1.1 and TLS 1.2, in addition to SSL 3.0 and TLS 1.0, when using NetTcp with transport security and client authentication. Теперь можно выбрать, какой протокол использовать, или отключить старые менее безопасные протоколы.It is now possible to select which protocol to use, or to disable old lesser secure protocols. Это можно сделать, задав свойство SslProtocols или добавив следующие данные в файл конфигурации.This can be done either by setting the SslProtocols property or by adding the following to a configuration file.

      <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>
      
    • Отправка сообщений с помощью разных подключений HTTPSending messages using different HTTP connections

      WCF теперь позволяет пользователям отправлять некоторые сообщения с помощью разных базовых HTTP-подключений.WCF now allows users to ensure certain messages are sent using different underlying HTTP connections. Это можно сделать двумя способами.There are two ways to do this:

      • С помощью префикса имени группы подключенийUsing a connection group name prefix

        Пользователи могут указать строку, которую WCF будет использовать как префикс для имени группы подключений.Users can specify a string that WCF will use as a prefix for the connection group name. Два сообщения с разными префиксами отправляются с помощью разных базовых HTTP-подключений.Two messages with different prefixes are sent using different underlying HTTP connections. Префикс задается путем добавления пары "ключ-значение" в свойство Message.Properties сообщения.You set the prefix by adding a key/value pair to the message's Message.Properties property. Ключ — это "HttpTransportConnectionGroupNamePrefix"; значение — желаемый префикс.The key is "HttpTransportConnectionGroupNamePrefix"; the value is the desired prefix.

      • С помощью разных фабрик каналовUsing different channel factories

        Пользователи могут также включить функцию, которая гарантирует, что сообщения, отправляемые по каналам, созданным разными фабриками каналов, будут отправляться с помощью разных базовых HTTP-подключений.Users can also enable a feature that ensures that messages sent using channels created by different channel factories will use different underlying HTTP connections. Чтобы включить эту функцию, пользователи должны самостоятельно задать для следующего параметра appSetting значение true.To enable this feature, users must set the following appSetting to true:

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

    Теперь можно указать интервал (в секундах) удержания службой рабочего процесса внеочередного запроса операции при наличии незавершенной закладки "без протокола" до истечения времени ожидания запроса.You can now specify the number of seconds a workflow service will hold on to an out-of-order operation request when there is an outstanding "non-protocol" bookmark before timing out the request. Закладка "без протокола" — это закладка, которая не связана с незавершенными действиями получения.A "non-protocol" bookmark is a bookmark that is not related to outstanding Receive activities. Некоторые действия создают закладки без протокола в собственной реализации, поэтому не всегда очевидно, что закладка без протокола существует.Some activities create non-protocol bookmarks within their implementation, so it may not be obvious that a non-protocol bookmark exists. К таким действиям относятся State и Pick.These include State and Pick. Соответственно, при наличии службы рабочего процесса, реализованной с помощью конечного автомата или содержащей действие Pick, вероятнее всего, имеются закладки без протокола.So if you have a workflow service implemented with a state machine or containing a Pick activity, you will most likely have non-protocol bookmarks. Укажите интервал, добавив строку следующего вида в раздел appSettings файла app.config.You specify the interval by adding a line like the following to the appSettings section of your app.config file:

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

    Значение по умолчанию — 60 секунд.The default value is 60 seconds. Если value имеет значение 0, внеочередные запросы немедленно отклоняются с созданием ошибки с текстом, который выглядит следующим образом.If value is set to 0, out-of-order requests are immediately rejected with a fault with text that looks like this:

    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.
    

    Это же сообщение отображается при получении сообщения о внеочередной операции в отсутствии закладок без протокола.This is the same message that you receive if an out-of-order operation message is received and there are no non-protocol bookmarks.

    Если элемент FilterResumeTimeoutInSeconds имеет ненулевое значение, существуют закладки без протокола и истекает интервал времени ожидания, то происходит сбой операции с сообщением об истечении времени ожидания.If the value of the FilterResumeTimeoutInSeconds element is non-zero, there are non-protocol bookmarks, and the timeout interval expires, the operation fails with a timeout message.

  • ТранзакцииTransactions

    Теперь можно включить идентификатор распределенной транзакции для транзакций, вызвавших создание исключения, производного от TransactionException.You can now include the distributed transaction identifier for the transaction that has caused an exception derived from TransactionException to be thrown. Это можно сделать, добавив следующий ключ в раздел appSettings файла app.config:You do this by adding the following key to the appSettings section of your app.config file:

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

    Значение по умолчанию — false.The default value is false.

  • СетьNetworking

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

      Windows 10 включает новый алгоритм сетевых подключений с высокой масштабируемостью, который повышает эффективность использования ресурсов компьютера путем повторного использования локальных портов для исходящих TCP-подключений.Windows 10 includes a new high-scalability networking algorithm that makes better use of machine resources by reusing local ports for outbound TCP connections. .NET Framework 4.6 поддерживает новый алгоритм, который позволяет приложениям .NET использовать преимущества нового поведения..NET Framework 4.6 supports the new algorithm, enabling .NET apps to take advantage of the new behavior. В предыдущих версиях Windows существовало искусственно заданное ограничение числа параллельных подключений (обычно 16 384, размер динамического диапазона портов по умолчанию), которое могло ограничивать масштабируемость службы, вызывая нехватку портов при высокой загрузке.In previous versions of Windows, there was an artificial concurrent connection limit (typically 16,384, the default size of the dynamic port range), which could limit the scalability of a service by causing port exhaustion when under load.

      В .NET Framework 4.6 добавлены два API, которые обеспечивают повторное использование портов и тем самым снимают ограничение на 64 КБ для одновременных подключений:In .NET Framework 4.6, two APIs have been added to enable port reuse, which effectively removes the 64 KB limit on concurrent connections:

      По умолчанию свойство ServicePointManager.ReusePort имеет значение false, если в качестве значения HWRPortReuseOnSocketBind раздела реестра HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 не задано 0x1.By default, the ServicePointManager.ReusePort property is false unless the HWRPortReuseOnSocketBind value of the HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 registry key is set to 0x1. Чтобы включить повторное использование локальных портов для HTTP-подключений, задайте для свойства ServicePointManager.ReusePort значение true.To enable local port reuse on HTTP connections, set the ServicePointManager.ReusePort property to true. В результате все исходящие подключения сокета TCP от HttpClient и HttpWebRequest будут использовать новый параметр сокета Windows 10, SO_REUSE_UNICASTPORT, который обеспечивает повторное использование локальных портов.This causes all outgoing TCP socket connections from HttpClient and HttpWebRequest to use a new Windows 10 socket option, SO_REUSE_UNICASTPORT, that enables local port reuse.

      Разработчики, создающие приложения, работающие только с сокетами, могут указать параметр System.Net.Sockets.SocketOptionName при вызове такого метода, как Socket.SetSocketOption, чтобы исходящие сокеты повторно использовали локальные порты во время привязки.Developers writing a sockets-only application can specify the System.Net.Sockets.SocketOptionName option when calling a method such as Socket.SetSocketOption so that outbound sockets reuse local ports during binding.

    • Поддержка международных доменных имен и PunyCodeSupport for international domain names and PunyCode

      В класс Uri добавлено новое свойство IdnHost, обеспечивающее более эффективную поддержку международных доменных имен и PunyCode.A new property, IdnHost, has been added to the Uri class to better support international domain names and PunyCode.

  • Изменение размеров элементов управления Windows Forms.Resizing in Windows Forms controls.

    Эта функция была расширена в .NET Framework 4.6 и включает типы DomainUpDown, NumericUpDown, DataGridViewComboBoxColumn, DataGridViewColumn и ToolStripSplitButton, а также прямоугольник, указанный свойством Bounds, используемым при рисовании UITypeEditor.This feature has been expanded in .NET Framework 4.6 to include the DomainUpDown, NumericUpDown, DataGridViewComboBoxColumn, DataGridViewColumn and ToolStripSplitButton types and the rectangle specified by the Bounds property used when drawing a UITypeEditor.

    Это функция, включаемая пользователем.This is an opt-in feature. Чтобы ее включить, задайте для элемента EnableWindowsFormsHighDpiAutoResizing в файле конфигурации приложения (app.config) значение true:To enable it, set the EnableWindowsFormsHighDpiAutoResizing element to true in the application configuration (app.config) file:

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Поддержка кодировок кодовых страницSupport for code page encodings

    .NET Core в первую очередь поддерживает кодировки Юникод и по умолчанию предоставляет ограниченную поддержку для кодировок кодовых страниц..NET Core primarily supports the Unicode encodings and by default provides limited support for code page encodings. Вы можете добавить поддержку кодировок кодовых страниц, доступных в .NET Framework, но не поддерживаемых в .NET Core, зарегистрировав эти кодировки в методе Encoding.RegisterProvider.You can add support for code page encodings available in .NET Framework but unsupported in .NET Core by registering code page encodings with the Encoding.RegisterProvider method. Для получения дополнительной информации см. System.Text.CodePagesEncodingProvider.For more information, see System.Text.CodePagesEncodingProvider.

  • .NET Native.NET Native

    Приложения Windows для Windows 10, ориентированные на .NET Core и написанные на языке C# или Visual Basic, могут использовать новую технологию компиляции приложения в машинный код вместо кода IL.Windows apps for Windows 10 that target .NET Core and are written in C# or Visual Basic can take advantage of a new technology that compiles apps to native code rather than IL. Они создают приложения, которым присуща более быстрая загрузка и время выполнения.They produce apps characterized by faster startup and execution times. Дополнительные сведения см. в разделе Компиляция приложений с помощью .NET Native.For more information, see Compiling Apps with .NET Native. Общие сведения о .NET Native и рассмотрение отличий такой компиляции от компиляции JIT и NGEN, а также ее влияние на код см. в разделе .NET Native и компиляция.For an overview of .NET Native that examines how it differs from both JIT compilation and NGEN and what that means for your code, see .NET Native and Compilation.

    Приложения по умолчанию компилируются в машинный код при компиляции в Visual Studio 2015 и более поздних версиях.Your apps are compiled to native code by default when you compile them with Visual Studio 2015 or later. Дополнительные сведения см. в разделе Начало работы с .NET Native.For more information, see Getting Started with .NET Native.

    Для поддержки отладки приложений .NET Native в интерфейс API отладки неуправляемого кода добавлено несколько новых интерфейсов и перечислений.To support debugging .NET Native apps, a number of new interfaces and enumerations have been added to the unmanaged debugging API. Дополнительные сведения см. в разделе Отладка (справочник по неуправляемым API).For more information, see the Debugging (Unmanaged API Reference) topic.

  • Пакеты .NET Framework с открытым исходным кодомOpen-source .NET Framework packages

    Пакеты .NET Core, такие как неизменяемые коллекции, API SIMD и API-интерфейсы сетевых подключений, например из пространства имен System.Net.Http, теперь доступны в виде пакетов с открытым кодом на сайте GitHub..NET Core packages such as the immutable collections, SIMD APIs, and networking APIs such as those found in the System.Net.Http namespace are now available as open-source packages on GitHub. Сведения о доступе к этому коду см. в разделе .NET на GitHub.To access the code, see .NET on GitHub. Дополнительные сведения и инструкции, как принять участие в этих пакетах, см. в разделе Ядро .NET и открытый исходный коддомашней странице .NET на GitHub.For more information and how to contribute to these packages, see .NET Core and Open-Source, .NET Home Page on GitHub.

Новые возможности .NET Framework 4.5.2What's new in .NET Framework 4.5.2

  • Новые API для приложений ASP.NET.New APIs for ASP.NET apps. Новые методы HttpResponse.AddOnSendingHeaders и HttpResponseBase.AddOnSendingHeaders позволяют проверять и изменять коды состояния и заголовки ответов при передаче ответа в клиентское приложение.The new HttpResponse.AddOnSendingHeaders and HttpResponseBase.AddOnSendingHeaders methods let you inspect and modify response headers and status code as the response is being flushed to the client app. Эти методы можно использовать вместо событий PreSendRequestHeaders и PreSendRequestContent; они более эффективны и надежны.Consider using these methods instead of the PreSendRequestHeaders and PreSendRequestContent events; they are more efficient and reliable.

    Метод HostingEnvironment.QueueBackgroundWorkItem позволяет планировать небольшие фоновые рабочие элементы.The HostingEnvironment.QueueBackgroundWorkItem method lets you schedule small background work items. ASP.NET отслеживает эти элементы и блокирует резкое прерывание службами IIS рабочего процесса до выполнения всех фоновых рабочих элементов.ASP.NET tracks these items and prevents IIS from abruptly terminating the worker process until all background work items have completed. Этот метод нельзя вызвать за пределами управляемого домена приложений ASP.NET.This method can't be called outside an ASP.NET managed app domain.

    Новые свойства HttpResponse.HeadersWritten и HttpResponseBase.HeadersWritten возвращают логические значения, которые указывают, были ли записаны заголовки ответов.The new HttpResponse.HeadersWritten and HttpResponseBase.HeadersWritten properties return Boolean values that indicate whether the response headers have been written. Эти свойства можно использовать, чтобы гарантировать, что вызовы API, например HttpResponse.StatusCode (создает исключения, если заголовки записаны), будут выполняться успешно.You can use these properties to make sure that calls to APIs such as HttpResponse.StatusCode (which throw exceptions if the headers have been written) will succeed.

  • Изменение размеров элементов управления Windows Forms.Resizing in Windows Forms controls. Эта функция была расширена.This feature has been expanded. Теперь системный параметр DPI можно использовать для изменения размера компонентов следующих дополнительных элементов управления (например, стрелки, раскрывающей поле со списком):You can now use the system DPI setting to resize components of the following additional controls (for example, the drop-down arrow in combo boxes):

    Это функция, включаемая пользователем.This is an opt-in feature. Чтобы ее включить, задайте для элемента EnableWindowsFormsHighDpiAutoResizing в файле конфигурации приложения (app.config) значение true:To enable it, set the EnableWindowsFormsHighDpiAutoResizing element to true in the application configuration (app.config) file:

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Новая функция рабочего процесса.New workflow feature. Диспетчер ресурсов, использующий метод EnlistPromotableSinglePhase (и, следовательно, реализующий интерфейс IPromotableSinglePhaseNotification), может использовать новый метод Transaction.PromoteAndEnlistDurable для запроса следующих операций:A resource manager that's using the EnlistPromotableSinglePhase method (and therefore implementing the IPromotableSinglePhaseNotification interface) can use the new Transaction.PromoteAndEnlistDurable method to request the following:

    • повышение транзакции до уровня "координатор распределенных транзакций (Майкрософт)" (MSDTC);Promote the transaction to a Microsoft Distributed Transaction Coordinator (MSDTC) transaction.

    • замена IPromotableSinglePhaseNotification перечислениемISinglePhaseNotification, которое является устойчивым перечислением, поддерживающим одноэтапные фиксации.Replace IPromotableSinglePhaseNotification with an ISinglePhaseNotification, which is a durable enlistment that supports single phase commits.

    Эту операцию можно выполнить в том же домене приложения; для повышения уровня не требуется написание дополнительного неуправляемого кода для взаимодействия с MSDTC.This can be done within the same app domain, and doesn't require any extra unmanaged code to interact with MSDTC to perform the promotion. Новый метод можно вызвать только при наличии ожидающего выполнения вызова из System.Transactions к методу IPromotableSinglePhaseNotificationPromote, который реализуется перечислением, поддерживающим повышение уровня.The new method can be called only when there's an outstanding call from System.Transactions to the IPromotableSinglePhaseNotificationPromote method that's implemented by the promotable enlistment.

  • Усовершенствования профилирования.Profiling improvements. Следующие новые неуправляемые API профилирования обеспечивают более надежное профилирование:The following new unmanaged profiling APIs provide more robust profiling:

    Предыдущие реализации ICorProfiler поддерживали отложенную загрузку зависимых сборок.Previous ICorProfiler implementations supported lazy loading of dependent assemblies. Новые API профилирования требуют немедленной доступности для загрузки вставляемых профилировщиком зависимых сборок вместо их загрузки после полной инициализации приложения.The new profiling APIs require dependent assemblies that are injected by the profiler to be loadable immediately, instead of being loaded after the app is fully initialized. Это изменение не влияет на пользователей существующих API ICorProfiler.This change doesn't affect users of the existing ICorProfiler APIs.

  • Усовершенствования отладки.Debugging improvements. Следующие новые интерфейсы API отладки неуправляемого кода обеспечивают более эффективную интеграцию с профилировщиком.The following new unmanaged debugging APIs provide better integration with a profiler. Теперь можно получить доступ к метаданным, вставленным профилировщиком, а также к локальным переменным и коду, созданным запросами компилировщика ReJIT во время отладки дампа.You can now access metadata inserted by the profiler as well as local variables and code produced by compiler ReJIT requests when dump debugging.

  • Изменения трассировки событий.Event tracing changes. .NET Framework 4.5.2 поддерживает внепроцессную трассировку действий, основанную на трассировке событий Windows (ETW), для более крупных контактных зон..NET Framework 4.5.2 enables out-of-process, Event Tracing for Windows (ETW)-based activity tracing for a larger surface area. Это позволяет поставщикам решений автоматического управления питанием (АРМ) предлагать облегченные средства, точно отслеживающие стоимость отдельных запросов и действий в разных потоках.This enables Advanced Power Management (APM) vendors to provide lightweight tools that accurately track the costs of individual requests and activities that cross threads. Эти события вызываются только при включении их контроллерами ETW. Таким образом, изменения не влияют на ранее написанный код ETW или код, который выполняется при отключенной трассировке ETW.These events are raised only when ETW controllers enable them; therefore, the changes don't affect previously written ETW code or code that runs with ETW disabled.

  • Повышение уровня транзакции и преобразование ее в устойчивое зачислениеPromoting a transaction and converting it to a durable enlistment

    Transaction.PromoteAndEnlistDurable — это новый API, добавленный в .NET Framework версий 4.5.2 и 4.6.Transaction.PromoteAndEnlistDurable is a new API added to .NET Framework 4.5.2 and 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.The method may be used by an enlistment that was previously created by Transaction.EnlistPromotableSinglePhase in response to the ITransactionPromoter.Promote method. Он запрашивает у System.Transactions повышение уровня транзакции до транзакции MSDTC и "преобразование" зачисления, допускающего повышение уровня, в зачисление устойчивых ресурсов.It asks System.Transactions to promote the transaction to an MSDTC transaction and to "convert" the promotable enlistment to a durable enlistment. После успешного завершения этого метода System.Transactions больше не будет ссылаться на интерфейс IPromotableSinglePhaseNotification, и все будущие уведомления будут поступать в предоставленном интерфейсе ISinglePhaseNotification.After this method completes successfully, the IPromotableSinglePhaseNotification interface will no longer be referenced by System.Transactions, and any future notifications will arrive on the provided ISinglePhaseNotification interface. Рассматриваемое зачисление должно работать как зачисление устойчивых ресурсов, поддерживая ведение журнала транзакций и восстановления.The enlistment in question must act as a durable enlistment, supporting transaction logging and recovery. Подробные сведения см. в разделе Transaction.EnlistDurable.Refer to Transaction.EnlistDurable for details. Кроме того, зачисление должно поддерживать ISinglePhaseNotification.In addition, the enlistment must support ISinglePhaseNotification. Этот метод может вызываться только во время обработки вызова ITransactionPromoter.Promote.This method can only be called while processing an ITransactionPromoter.Promote call. Если это не так, создается исключение TransactionException.If that is not the case, a TransactionException exception is thrown.

Новые возможности .NET Framework 4.5.1What's new in .NET Framework 4.5.1

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

  • Обновление 2 для Visual Studio 2013 включает обновления для шаблонов переносимой библиотеки классов для поддержки следующих сценариев:Visual Studio 2013 Update 2 includes updates to the Portable Class Library templates to support these scenarios:

    • Возможность использовать API среды выполнения Windows в переносимых библиотеках, предназначенных для Windows 8.1, Windows Phone 8.1 и Windows Phone Silverlight 8.1.You can use Windows Runtime APIs in portable libraries that target Windows 8.1, Windows Phone 8.1, and Windows Phone Silverlight 8.1.

    • возможность включить XAML-код (типы Windows.UI.XAML) в переносимые библиотеки, предназначенные для Windows 8.1 или Windows Phone 8.1.You can include XAML (Windows.UI.XAML types) in portable libraries when you target Windows 8.1 or Windows Phone 8.1. Поддерживаются следующие шаблоны XAML: "Пустая страница", "Словарь ресурсов", "Элемент управления-шаблон" и "Пользовательский элемент управления".The following XAML templates are supported: Blank Page, Resource Dictionary, Templated Control, and User Control.

    • Можно создать переносной компонент среды выполнения Windows (WINMD-файл) для использования в приложениях магазинов, предназначенных для Windows 8.1 и Windows Phone 8.1.You can create a portable Windows Runtime component (.winmd file) for use in Store apps that target Windows 8.1 and Windows Phone 8.1.

    • Можно изменить целевую платформу библиотеки классов Магазина Windows или Магазина Windows Phone, такой как переносимая библиотека классов.You can retarget a Windows Store or Windows Phone Store class library like a Portable Class Library.

    Дополнительные сведения об этих изменениях см. в разделе Переносимая библиотека классов.For more information about these changes, see Portable Class Library.

  • Набор содержимого .NET Framework теперь включает документацию для .NET Native. Это технология предварительной компиляции для сборки и развертывания приложений Windows.The .NET Framework content set now includes documentation for .NET Native, which is a precompilation technology for building and deploying Windows apps. .NET Native компилирует приложения напрямую в машинный код, а не в промежуточный язык (IL), что повышает производительность..NET Native compiles your apps directly to native code, rather than to intermediate language (IL), for better performance. Подробные сведения см. в разделе Компиляция приложений с помощью .NET Native.For details, see Compiling Apps with .NET Native.

  • На странице .NET Framework Reference Source предоставляются новые возможности навигации и расширенные функции.The .NET Framework Reference Source provides a new browsing experience and enhanced functionality. Теперь можно искать исходный код .NET Framework в Интернете, загрузить справочник для автономной работы и пошагово просматривать источники (включая исправления и обновления) во время отладки.You can now browse through the .NET Framework source code online, download the reference for offline viewing, and step through the sources (including patches and updates) during debugging. Дополнительные сведения см. в записи блога Новый облик .NET Reference Source.For more information, see the blog entry A new look for .NET Reference Source.

Новые функции и улучшения базовых классов в .NET Framework 4.5.1 включают следующее:New features and enhancements in the base classes in .NET Framework 4.5.1 include:

  • Автоматическая переадресация привязки для сборок.Automatic binding redirection for assemblies. Начиная с версии Visual Studio 2013 при компиляции приложения, ориентированного на .NET Framework 4.5.1, в файл конфигурации приложения можно добавить переадресации привязок, если приложение или его компоненты ссылаются на несколько версий одной и той же сборки.Starting with Visual Studio 2013, when you compile an app that targets the .NET Framework 4.5.1, binding redirects may be added to the app configuration file if your app or its components reference multiple versions of the same assembly. Включить эту функцию также можно для проектов, предназначенных для более ранних версий платформы .NET Framework.You can also enable this feature for projects that target older versions of the .NET Framework. Дополнительные сведения см. в разделе Практическое руководство. Включение и отключение автоматического перенаправления привязки.For more information, see How to: Enable and Disable Automatic Binding Redirection.

  • Возможность сбора диагностической информации, чтобы помочь разработчикам повысить производительность серверных и облачных приложений.Ability to collect diagnostics information to help developers improve the performance of server and cloud applications. Дополнительные сведения см. в описании методов WriteEventWithRelatedActivityId и WriteEventWithRelatedActivityIdCore класса EventSource.For more information, see the WriteEventWithRelatedActivityId and WriteEventWithRelatedActivityIdCore methods in the EventSource class.

  • Возможность явно уплотнять кучу больших объектов во время сборки мусора.Ability to explicitly compact the large object heap (LOH) during garbage collection. Дополнительные сведения см. в описании свойства GCSettings.LargeObjectHeapCompactionMode.For more information, see the GCSettings.LargeObjectHeapCompactionMode property.

  • Дополнительные улучшения производительности, например приостановка приложений ASP.NET, усовершенствования многоядерного JIT и более быстрый запуск приложений после обновления платформы .NET Framework.Additional performance improvements such as ASP.NET app suspension, multi-core JIT improvements, and faster app startup after a .NET Framework update. Дополнительные сведения см. в объявлении о выходе .NET Framework 4.5.1 и в публикации в блоге о приостановке приложения ASP.NET.For details, see the .NET Framework 4.5.1 announcement and the ASP.NET app suspend blog post.

Усовершенствования в Windows Forms включают следующие:Improvements to Windows Forms include:

  • Изменение размеров элементов управления Windows Forms.Resizing in Windows Forms controls. Системный параметр DPI можно использовать для изменения размера компонентов элементов управления (например, значков, которые отображаются в сетке свойств) путем явного включения с помощью записи в файле конфигурации приложения (app.config) нужного приложения.You can use the system DPI setting to resize components of controls (for example, the icons that appear in a property grid) by opting in with an entry in the application configuration file (app.config) for your app. Эта функция в настоящее время поддерживается для следующих элементов управления Windows Forms:This feature is currently supported in the following Windows Forms controls:

    Чтобы включить эту функцию, добавьте новый элемент <appSettings> в файл конфигурации (app.config) и задайте для элемента EnableWindowsFormsHighDpiAutoResizing значение true:To enable this feature, add a new <appSettings> element to the configuration file (app.config) and set the EnableWindowsFormsHighDpiAutoResizing element to true:

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

В процесс отладки приложений .NET Framework в Visual Studio 2013 внесены следующие улучшения.Improvements when debugging your .NET Framework apps in Visual Studio 2013 include:

  • Возвращаемые значения в отладчике Visual Studio.Return values in the Visual Studio debugger. При отладке управляемого приложения в Visual Studio 2013 в окне "Видимые" отображаются возвращаемые типы и значения для методов.When you debug a managed app in Visual Studio 2013, the Autos window displays return types and values for methods. Эти сведения доступны для приложений для настольных систем, приложений для Магазина Windows и приложений Windows Phone.This information is available for desktop, Windows Store, and Windows Phone apps. Дополнительные сведения см. в статье Анализ значений, возвращаемых из вызовов методов.For more information, see Examine return values of method calls.

  • "Изменить и продолжить" для 64-разрядных приложений.Edit and Continue for 64-bit apps. Visual Studio 2013 поддерживает действие "Изменить и продолжить" для 64-разрядных управляемых приложений для настольных систем, приложений для Магазина Windows и приложений для Windows Phone.Visual Studio 2013 supports the Edit and Continue feature for 64-bit managed apps for desktop, Windows Store, and Windows Phone. Существующие ограничения остаются действующими и для 32-разрядных, и для 64-разрядных приложений (см. последний раздел статьи Поддерживаемые изменения кода (C#)).The existing limitations remain in effect for both 32-bit and 64-bit apps (see the last section of the Supported Code Changes (C#) article).

  • Отладка с поддержкой асинхронности.Async-aware debugging. Чтобы упростить отладку асинхронных приложений в Visual Studio 2013, стеке вызовов скрывает код инфраструктуры, предоставляемый компиляторами для поддержки асинхронного программирования, а также цепочки логических родительских кадров, что упрощает прослеживание логики выполнения программы.To make it easier to debug asynchronous apps in Visual Studio 2013, the call stack hides the infrastructure code provided by compilers to support asynchronous programming, and also chains in logical parent frames so you can follow logical program execution more clearly. В окне "Задачи", которое заменяет собой окно "Параллельные задачи", отображаются задачи, относящиеся к определенной точке останова, а также все другие задачи, которые в данный момент активны или запланированы в приложении.A Tasks window replaces the Parallel Tasks window and displays tasks that relate to a particular breakpoint, and also displays any other tasks that are currently active or scheduled in the app. Вы можете прочесть об этой возможности в разделе "Отладка с поддержкой асинхронности" объявления о выходе .NET Framework 4.5.1.You can read about this feature in the "Async-aware debugging" section of the .NET Framework 4.5.1 announcement.

  • Усовершенствованная поддержка исключений для компонентов среды выполнения Windows.Better exception support for Windows Runtime components. В Windows 8.1 все исключения, возникающие в приложениях для Магазина Windows, сохраняют сведения об ошибке, которая вызвала исключение, даже при переходе через границы языков.In Windows 8.1, exceptions that arise from Windows Store apps preserve information about the error that caused the exception, even across language boundaries. Вы можете прочесть об этой возможности в разделе "Разработка приложений для Магазина Windows" объявления о выходе .NET Framework 4.5.1.You can read about this feature in the "Windows Store app development" section of the .NET Framework 4.5.1 announcement.

Начиная с Visual Studio 2013 вы можете использовать Управляемое средство профильной оптимизации (Mpgo.exe) для оптимизации приложений для Магазина Windows 8.x и для настольных систем.Starting with Visual Studio 2013, you can use the Managed Profile Guided Optimization Tool (Mpgo.exe) to optimize Windows 8.x Store apps as well as desktop apps.

См. новые возможности ASP.NET 4.5.1 в статье Заметки о выпуске ASP.NET and Web Tools для Visual Studio 2013.For new features in ASP.NET 4.5.1, see ASP.NET and Web Tools for Visual Studio 2013 Release Notes.

Новые возможности .NET Framework 4.5What's new in .NET Framework 4.5

базовых классов;Base classes

  • Возможность уменьшения количества перезапусков системы путем обнаружения и закрытия приложений .NET Framework 4 во время развертывания.Ability to reduce system restarts by detecting and closing .NET Framework 4 applications during deployment. См. раздел Уменьшение числа перезагрузок при установке платформы .NET Framework 4.5.See Reducing System Restarts During .NET Framework 4.5 Installations.

  • Поддержка массивов, размер которых превышает 2 ГБ, на 64-разрядных платформах.Support for arrays that are larger than 2 gigabytes (GB) on 64-bit platforms. Эту функцию можно включить в файле конфигурации приложения.This feature can be enabled in the application configuration file. См. описание элемента <gcAllowVeryLargeObjects>, в котором также перечислены другие ограничения на размер объекта и размер массива.See the <gcAllowVeryLargeObjects> element, which also lists other restrictions on object size and array size.

  • Улучшенная производительность благодаря фоновой сборке мусора для серверов.Better performance through background garbage collection for servers. Если вы используете серверную сборку мусора в .NET Framework 4.5, фоновая сборка мусора включается автоматически.When you use server garbage collection in the .NET Framework 4.5, background garbage collection is automatically enabled. Сведения см. в разделе "Фоновая сборка мусора сервера" статьи Основы сборки мусора.See the Background Server Garbage Collection section of the Fundamentals of Garbage Collection topic.

  • Фоновая компиляция по требованию (JIT), которая доступна по выбору на многоядерных процессорах для повышения производительности приложения.Background just-in-time (JIT) compilation, which is optionally available on multi-core processors to improve application performance. См. раздел ProfileOptimization.See ProfileOptimization.

  • Возможность ограничения времени, в течение которого обработчик регулярных выражений будет пытаться разрешить регулярное выражение до истечения срока действия выражения. См. свойство Regex.MatchTimeout.Ability to limit how long the regular expression engine will attempt to resolve a regular expression before it times out. See the Regex.MatchTimeout property.

  • Возможность определить язык и региональные параметры по умолчанию для домена приложения.Ability to define the default culture for an application domain. См. класс CultureInfo.See the CultureInfo class.

  • Консольная поддержка кодировки Юникод (UTF-16).Console support for Unicode (UTF-16) encoding. См. класс Console.See the Console class.

  • Поддержка управления версиями данных сортировки и сравнения строк, зависящих от языка и региональных параметров.Support for versioning of cultural string ordering and comparison data. См. класс SortVersion.See the SortVersion class.

  • Улучшенная производительность при извлечении ресурсов.Better performance when retrieving resources. См. раздел Упаковка и развертывание ресурсов.See Packaging and Deploying Resources.

  • Усовершенствования в области сжатия ZIP, позволяющие уменьшить размер сжатого файла.Zip compression improvements to reduce the size of a compressed file. См. пространство имен System.IO.Compression.See the System.IO.Compression namespace.

  • Возможность настраивать контекст отражения для переопределения поведения отражения по умолчанию с помощью класса CustomReflectionContext.Ability to customize a reflection context to override default reflection behavior through the CustomReflectionContext class.

  • Поддержка версии 2008 стандарта интернационализированных доменных имен в приложениях (Internationalized Domain Names in Applications, IDNA) при использовании класса System.Globalization.IdnMapping в Windows 8.Support for the 2008 version of the Internationalized Domain Names in Applications (IDNA) standard when the System.Globalization.IdnMapping class is used on Windows 8.

  • Делегирование сравнения строк операционной системе, которая реализует Юникод 6.0, при использовании .NET Framework в среде Windows 8.Delegation of string comparison to the operating system, which implements Unicode 6.0, when the .NET Framework is used on Windows 8. При работе на других платформах .NET Framework включает собственные данные сравнения строк, которые реализуют Юникод 5.x.When running on other platforms, the .NET Framework includes its own string comparison data, which implements Unicode 5.x. См. класс String и раздел "Примечания" в описании класса SortVersion.See the String class and the Remarks section of the SortVersion class.

  • Возможность вычисления хэш-кодов для строк для каждого домена приложения.Ability to compute the hash codes for strings on a per application domain basis. См. раздел Элемент <UseRandomizedStringHashAlgorithm>.See <UseRandomizedStringHashAlgorithm> Element.

  • Поддержка отражения типов, разделенная между классами Type и TypeInfo.Type reflection support split between Type and TypeInfo classes. См. раздел Отражение в .NET Framework для приложений Магазина Windows.See Reflection in the .NET Framework for Windows Store Apps.

Managed Extensibility Framework (MEF)Managed Extensibility Framework (MEF)

В .NET Framework 4.5 для Managed Extensibility Framework (MEF) предоставлены следующие новые возможности.In the .NET Framework 4.5, the Managed Extensibility Framework (MEF) provides the following new features:

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

  • Модель программирования на основе соглашений, позволяющая создавать части на основе соглашений об именах, а не на основе атрибутов.Convention-based programming model that enables you to create parts based on naming conventions rather than attributes.

  • Множественные области действия.Multiple scopes.

  • Подмножество MEF, которое можно использовать при создании приложений для Магазина Windows 8.x.A subset of MEF that you can use when you create Windows 8.x Store apps. Это подмножество доступно как загружаемый пакет из коллекции NuGet.This subset is available as a downloadable package from the NuGet Gallery. Чтобы установить пакет, откройте проект в Visual Studio, выберите Управление пакетами NuGet в меню Проект и выполните поиск пакета Microsoft.Composition в Интернете.To install the package, open your project in Visual Studio, choose Manage NuGet Packages from the Project menu, and search online for the Microsoft.Composition package.

Дополнительные сведения см. в разделе Managed Extensibility Framework.For more information, see Managed Extensibility Framework (MEF).

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

В .NET Framework 4.5 добавлены новые асинхронные возможности в языки C# и Visual Basic.In the .NET Framework 4.5, new asynchronous features were added to the C# and Visual Basic languages. Эти возможности представляют собой модель на основе задач для выполнения асинхронных операций.These features add a task-based model for performing asynchronous operations. Для использования этой новой модели используйте асинхронные методы в классах ввода-вывода.To use this new model, use the asynchronous methods in the I/O classes. См. раздел Асинхронные операции файлового ввода-вывода.See Asynchronous File I/O.

ИнструментыTools

В .NET Framework 4.5 генератор файлов ресурсов (Resgen.exe) позволяет преобразовать RESOURCES-файл, внедренный в сборку .NET Framework, в RESW-файл для использования в приложениях Магазина Windows 8.x.In the .NET Framework 4.5, Resource File Generator (Resgen.exe) enables you to create a .resw file for use in Windows 8.x Store apps from a .resources file embedded in a .NET Framework assembly. Дополнительные сведения см. в разделе Resgen.exe (генератор файлов ресурсов).For more information, see Resgen.exe (Resource File Generator).

Средство управляемой оптимизации с использованием профиля (Mpgo.exe) позволяет сократить время запуска приложения, улучшить использование памяти (размер рабочего множества) и пропускную способность путем оптимизации сборок машинных образов.Managed Profile Guided Optimization (Mpgo.exe) enables you to improve application startup time, memory utilization (working set size), and throughput by optimizing native image assemblies. Этот инструмент командной строки формирует данные профилирования для сборок машинного образа приложения.The command-line tool generates profile data for native image application assemblies. См. раздел Mpgo.exe (инструмент управляемой оптимизации с использованием профиля).See Mpgo.exe (Managed Profile Guided Optimization Tool). Начиная с Visual Studio 2013 вы можете использовать средство Mpgo.exe для оптимизации приложений для Магазина Windows 8.x и для настольных систем.Starting with Visual Studio 2013, you can use Mpgo.exe to optimize Windows 8.x Store apps as well as desktop apps.

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

В .NET Framework 4.5 предусмотрено несколько новых возможностей и усовершенствований для параллельных вычислений.The .NET Framework 4.5 provides several new features and improvements for parallel computing. К ним относятся повышение производительности, повышение управляемости, улучшенная поддержка асинхронного программирования, новая библиотека потоков данных и улучшенная поддержка параллельной отладки и анализа производительности.These include improved performance, increased control, improved support for asynchronous programming, a new dataflow library, and improved support for parallel debugging and performance analysis. См. запись Новые возможности параллелизма в .NET 4.5 в блоге, посвященном параллельному программированию в .NET.See the entry What’s New for Parallelism in .NET 4.5 in the Parallel Programming with .NET blog.

ИнтернетWeb

В ASP.NET 4.5 и 4.5.1 добавилась привязка модели для Web Forms, поддержка WebSocket, асинхронные обработчики, усовершенствования для повышения производительности и многие другие возможности.ASP.NET 4.5 and 4.5.1 add model binding for Web Forms, WebSocket support, asynchronous handlers, performance enhancements, and many other features. Дополнительные сведения см. в следующих ресурсах:For more information, see the following resources:

Сеть Networking

.NET Framework 4.5 предоставляет новый интерфейс программирования для приложений HTTP.The .NET Framework 4.5 provides a new programming interface for HTTP applications. Дополнительные сведения см. в описании новых пространств имен System.Net.Http и System.Net.Http.Headers.For more information, see the new System.Net.Http and System.Net.Http.Headers namespaces.

Также предусмотрена поддержка нового интерфейса программирования для приема и взаимодействия с соединением WebSocket с помощью существующего класса HttpListener и связанных с ним классов.Support is also included for a new programming interface for accepting and interacting with a WebSocket connection by using the existing HttpListener and related classes. Дополнительные сведения см. в описании нового пространства имен System.Net.WebSockets и класса HttpListener.For more information, see the new System.Net.WebSockets namespace and the HttpListener class.

Кроме того, в .NET Framework 4.5 улучшено сетевое взаимодействие.In addition, the .NET Framework 4.5 includes the following networking improvements:

  • RFC-совместимая поддержка URI.RFC-compliant URI support. Дополнительные сведения см. в описании Uri и соответствующих классов.For more information, see Uri and related classes.

  • Поддержка синтаксического анализа интернационализированных доменных имен (Internationalized Domain Name, IDN).Support for Internationalized Domain Name (IDN) parsing. Дополнительные сведения см. в описании Uri и соответствующих классов.For more information, see Uri and related classes.

  • Поддержка интернационализации адресов электронной почты (Email Address Internationalization, EAI).Support for Email Address Internationalization (EAI). Дополнительные сведения см. в описании пространства имен System.Net.Mail.For more information, see the System.Net.Mail namespace.

  • Улучшенная поддержка протокола IPv6.Improved IPv6 support. Дополнительные сведения см. в описании пространства имен System.Net.NetworkInformation.For more information, see the System.Net.NetworkInformation namespace.

  • Поддержка сокета с двойным режимом.Dual-mode socket support. Дополнительные сведения см. в описаниях классов Socket и TcpListener.For more information, see the Socket and TcpListener classes.

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

В .NET Framework 4.5 для Windows Presentation Foundation (WPF) добавлены изменения и усовершенствования в следующих областях.In the .NET Framework 4.5, Windows Presentation Foundation (WPF) contains changes and improvements in the following areas:

  • Новый элемент управления Ribbon, позволяющий реализовать пользовательский интерфейс в виде ленты, на которой размещаются панель быстрого доступа, меню приложения и вкладки.The new Ribbon control, which enables you to implement a ribbon user interface that hosts a Quick Access Toolbar, Application Menu, and tabs.

  • Новый интерфейс INotifyDataErrorInfo, который поддерживает синхронную и асинхронную проверку данных.The new INotifyDataErrorInfo interface, which supports synchronous and asynchronous data validation.

  • Новые возможности для классов VirtualizingPanel и Dispatcher.New features for the VirtualizingPanel and Dispatcher classes.

  • Повышение производительности при отображении больших наборов сгруппированных данных, а также за счет доступа к коллекциям в потоках вне пользовательского интерфейса.Improved performance when displaying large sets of grouped data, and by accessing collections on non-UI threads.

  • Привязка данных к статическим свойствам, привязка данных к пользовательским типам, реализующим интерфейс ICustomTypeProvider, а также извлечение сведений о привязке данных из выражения привязки.Data binding to static properties, data binding to custom types that implement the ICustomTypeProvider interface, and retrieval of data binding information from a binding expression.

  • Изменение расположения данных по мере изменение значений (формирование данных в реальном времени).Repositioning of data as the values change (live shaping).

  • Возможность проверить, отсоединен ли контекст данных для контейнера элемента.Ability to check whether the data context for an item container is disconnected.

  • Возможность задать количество времени, которое должно пройти между операциями изменения свойств и обновления источника данных.Ability to set the amount of time that should elapse between property changes and data source updates.

  • Улучшенная поддержка реализации шаблонов слабых событий.Improved support for implementing weak event patterns. Кроме того, события теперь могут принимать расширения разметки.Also, events can now accept markup extensions.

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)

В .NET Framework 4.5 добавлены следующие возможности, чтобы упростить создание и обслуживание приложений Windows Communication Foundation (WCF).In the .NET Framework 4.5, the following features have been added to make it simpler to write and maintain Windows Communication Foundation (WCF) applications:

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

  • Поддержка разработки в соответствии с парадигмой "сначала контракт".Support for contract-first development.

  • Упрощение настройки режима совместимости ASP.NET.Ability to configure ASP.NET compatibility mode more easily.

  • Изменения значений свойств транспорта по умолчанию для уменьшения вероятности необходимости их настройки.Changes in default transport property values to reduce the likelihood that you will have to set them.

  • Обновления класса XmlDictionaryReaderQuotas для уменьшения вероятности того, что потребуется вручную настраивать квоты для читателей словаря XML.Updates to the XmlDictionaryReaderQuotas class to reduce the likelihood that you will have to manually configure quotas for XML dictionary readers.

  • Проверка файлов конфигурации WCF силами Visual Studio в рамках процесса сборки, позволяющая выявить ошибки в конфигурации до запуска приложения.Validation of WCF configuration files by Visual Studio as part of the build process, so you can detect configuration errors before you run your application.

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

  • Новое сопоставление протокола HTTPS, облегчающее предоставление конечной точки по HTTPS с помощью служб IIS.New HTTPS protocol mapping to make it easier to expose an endpoint over HTTPS with Internet Information Services (IIS).

  • Возможность создавать метаданные в одном документе WSDL путем добавления ?singleWSDL к URL-адресу службы.Ability to generate metadata in a single WSDL document by appending ?singleWSDL to the service URL.

  • Поддержка Websockets, обеспечивающая истинно двунаправленный обмен данными через порты 80 и 443 с показателями производительности, схожими с характеристиками TCP-транспорта.Websockets support to enable true bidirectional communication over ports 80 and 443 with performance characteristics similar to the TCP transport.

  • Поддержка настройки служб в коде.Support for configuring services in code.

  • Всплывающие подсказки в редакторе XML.XML Editor tooltips.

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

  • Поддержка сжатия двоичного кодировщика.Binary encoder compression support.

  • Поддержка UDP-транспорта, которая позволяет разработчикам писать службы, использующие обмен сообщениями по принципу "отправить и забыть".Support for a UDP transport that enables developers to write services that use "fire and forget" messaging. Клиент отправляет сообщение службе, но не ожидает от нее ответа.A client sends a message to a service and expects no response from the service.

  • Возможность поддерживать несколько режимов аутентификации в одной конечной точке WCF при использовании HTTP-транспорта и безопасности транспорта.Ability to support multiple authentication modes on a single WCF endpoint when using the HTTP transport and transport security.

  • Поддержка служб WCF, использующих интернационализированные доменные имена (IDN).Support for WCF services that use internationalized domain names (IDNs).

Дополнительные сведения см. в разделе Новые возможности в Windows Communication Foundation.For more information, see What's New in Windows Communication Foundation.

Windows Workflow Foundation (WF)Windows Workflow Foundation (WF)

В .NET Framework 4.5 для Windows Workflow Foundation (WF) добавлено несколько новых возможностей, в том числе следующие.In the .NET Framework 4.5, several new features were added to Windows Workflow Foundation (WF), including:

  • Рабочие процессы конечного автомата, впервые добавленные в .NET Framework 4.0.1 (обновление 1 для .NET Framework 4).State machine workflows, which were first introduced as part of .NET Framework 4.0.1 (.NET Framework 4 Platform Update 1). В это обновление вошло несколько новых классов и действий, позволивших разработчикам создавать рабочие процессы конечного автомата.This update included several new classes and activities that enabled developers to create state machine workflows. В .NET Framework 4.5 эти классы и действия были обновлены и теперь включают в себя следующие возможности.These classes and activities were updated for the .NET Framework 4.5 to include:

    • Возможность установки точек останова на состояниях.The ability to set breakpoints on states.

    • Возможность копирования и вставки переходов в конструкторе рабочих процессов.The ability to copy and paste transitions in the workflow designer.

    • Поддержка создания в конструкторе переходов с общим триггером.Designer support for shared trigger transition creation.

    • Действия для создания рабочих процессов конечного автомата, в том числе StateMachine, State и Transition.Activities for creating state machine workflows, including: StateMachine, State, and Transition.

  • Расширенные возможности конструктора рабочих процессов, например следующие:Enhanced Workflow Designer features such as the following:

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

    • Возможность автоматически создавать действие Sequence, когда к действию-контейнеру добавляется второе действие — дочерний элемент, и включать оба действия в действие Sequence.Ability to automatically create a Sequence activity when a second child activity is added to a container activity, and to include both activities in the Sequence activity.

    • Поддержка панорамирования, которая позволяет изменять видимую часть рабочего процесса без использования полос прокрутки.Panning support, which enables the visible portion of a workflow to be changed without using the scroll bars.

    • Новое представление Структура документа, в котором компоненты рабочего процесса отображаются в виде древовидной структуры с возможностью выбора компонента в представлении Структура документа.A new Document Outline view that shows the components of a workflow in a tree-style outline view and lets you select a component in the Document Outline view.

    • Возможность добавлять примечаний к действиям.Ability to add annotations to activities.

    • Возможность определять и использовать делегаты действий с помощью конструктора рабочих процессов.Ability to define and consume activity delegates by using the workflow designer.

    • Автоматическое соединение и автоматическая вставка для действий и переходов в рабочих процессах блок-схемы и конечного автомата.Auto-connect and auto-insert for activities and transitions in state machine and flowchart workflows.

  • Хранение данных о состоянии представления для рабочего процесса в одном элементе в XAML-файле, чтобы данные о состоянии представления можно было легко находить и редактировать.Storage of the view state information for a workflow in a single element in the XAML file, so you can easily locate and edit the view state information.

  • Действие-контейнер NoPersistScope для предотвращения сохранения дочерних действий.A NoPersistScope container activity to prevent child activities from persisting.

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

    • Проекты рабочих процессов, в которых используется Visual Basic, будут использовать выражения Visual Basic, а проекты рабочих процессов C# будут использовать выражения C#.Workflow projects that use Visual Basic will use Visual Basic expressions, and C# workflow projects will use C# expressions.

    • Проекты рабочих процессов C#, созданные в Visual Studio 2010 и содержащие выражения Visual Basic, совместимы с проектами рабочих процессов C#, в которых используются выражения C#.C# workflow projects that were created in Visual Studio 2010 and that have Visual Basic expressions are compatible with C# workflow projects that use C# expressions.

  • Усовершенствования управления версиями:Versioning enhancements:

    • Новый класс WorkflowIdentity, который обеспечивает сопоставление между хранимым экземпляром рабочего процесса и его определением рабочего процесса.The new WorkflowIdentity class, which provides a mapping between a persisted workflow instance and its workflow definition.

    • Параллельное выполнение нескольких версий рабочего процесса в одном и том же узле, в том числе WorkflowServiceHost.Side-by-side execution of multiple workflow versions in the same host, including WorkflowServiceHost.

    • В динамическом обновлении это возможность изменять определение сохраненного экземпляра рабочего процесса.In Dynamic Update, the ability to modify the definition of a persisted workflow instance.

  • Разработка служб рабочего процесса в соответствии с парадигмой "сначала контракт", что обеспечивает поддержку автоматического создания действий в соответствии с существующим контрактом службы.Contract-first workflow service development, which provides support for automatically generating activities to match an existing service contract.

Дополнительные сведения см. в разделе Новые возможности Windows Workflow Foundation.For more information, see What's New in Windows Workflow Foundation.

.NET для приложений Магазина Windows 8.x.NET for Windows 8.x Store apps

Приложения для Магазина Windows 8.x разрабатываются для конкретных форм-факторов и в полной мере используют возможности операционной системы Windows.Windows 8.x Store apps are designed for specific form factors and leverage the power of the Windows operating system. Предоставляется подмножество .NET Framework 4.5 или 4.5.1 для разработки приложений для Магазина Windows 8.x с использованием C# или Visual Basic.A subset of the .NET Framework 4.5 or 4.5.1 is available for building Windows 8.x Store apps for Windows by using C# or Visual Basic. Это подмножество называется .NET для Магазина Windows 8.x. Оно подробно рассматривается в обзорной статье.This subset is called .NET for Windows 8.x Store apps and is discussed in an overview.

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

Проект "Переносимая библиотека классов" для Visual Studio 2012 (и более поздних версий) позволяет писать и собирать управляемые сборки, работающие на нескольких платформах .NET Framework.The Portable Class Library project in Visual Studio 2012 (and later versions) enables you to write and build managed assemblies that work on multiple .NET Framework platforms. Используя проект "Переносимая библиотека классов", вы можете создавать приложения для конкретных платформ (например, для Windows Phone или .NET для приложений Магазина Windows 8.x).Using a Portable Class Library project, you choose the platforms (such as Windows Phone and .NET for Windows 8.x Store apps) to target. Доступные типы и члены в проекте автоматически ограничиваются типами и членами, общими для этих платформ.The available types and members in your project are automatically restricted to the common types and members across these platforms. Дополнительные сведения см. в статье Переносимая библиотека классов.For more information, see Portable Class Library.

См. такжеSee also