Announcing .NET Framework 4.6.1 RC

We are pleased to announce the release of .NET Framework 4.6.1 RC today. This release includes ~150 fixes and some new features. You can read about the new fixes and features that are included in the RC release and try out the bits using the links below. Here is a summary of the few of the updates and key improvements we are introducing today:

  • WPF improvements for spell check, support for per-user custom dictionaries and improved touch performance 
  • Enhanced support for Elliptic Curve Digital Signature Algorithm (ECDSA) X509 certificates
  • Added support in SQL Connectivity for AlwaysOn and Always Encrypted
  • Profiling improvements related to IcorProfilerInfo interface and introduction of Ngen PDBs
  • System.Transactions APIs now support distributed transactions with a non-MSDTC coordinator
  • Many other performance, stability, and reliability related fixes in RyuJIT, GC, WPF and WCF.

You can download and try out the release now:

 

.NET Framework 4.6.1 RC

You can learn more about this release by looking at .NET Framework 4.6.1 RC release change list, Application Compatibility in the .NET Framework 4.6.1 RC, and .NET Framework API diff (GitHub) between the .NET 4.6.1 and .NET 4.6 releases. The .NET Framework 4.6.1 can be installed on Windows 10, Windows 8.1, Windows 8, Windows 7 and the corresponding server platforms. You can install the .NET Framework 4.6.1 RC using either the web installer or the offline installer

You can target the .NET Framework 4.6.1 in Visual Studio 2012 or later by installing the .NET Framework 4.6.1 RC Targeting Pack.

 

Windows Presentation Foundation

The WPF team has made a number of key improvements in this release. For more details on these improvements and more, check out the blog post by the WPF Team here.

Improved Performance

Touch stack performance has been improved with coalescing support added to touch events such that current position is reported after a UI thread delay similar to mouse pointer movements. Additionally, RichTextBox typing no longer takes up huge cycles in the Render thread during fast input and you will be able to notice a much smoother experience in this scenario.

Samples

There are a number of WPF Samples on MSDN. We are moving over 200+ of these popular samples (based on usage) into an Open Source GitHub repository. Help us improve our samples by sending us a pull-request or opening a GitHub issue.

DirectX Extensions

We have released a NuGet package that provides new implementations of D3DImage that will make it easy for you to
interoperate with DX10 and Dx11 content. Support for DX12 will be added in a future release. The code for this package has been open sourced and is available here.

Spell Checking Improvements

The spell checker in WPF has been updated on Windows 8.1 and above to leverage OS support for spell checking additional languages.  There is no change in functionality on Vista SP2, Windows 7 and Windows 8.

Additional support for per-user custom dictionaries

In .NET 4.6.1 we have added support for WPF to recognize custom dictionaries registered globally. This capability is available in addition to the ability to register them per-control. In addition, custom dictionaries in Windows 10 and Windows 8.1 now have affordances for Excluded Words and AutoCorrect lists.

 

Cryptography Updates

Support for X509certificates containing ECDSA

We made some major improvements to the System.Security.Cryptography APIs in .NET 4.6 when RSACng support for X509 certificates was added. With .NET 4.6.1 we have extended the cryptographic libraries to enhance support for Elliptic Curve Digital Signature Algorithm (ECDSA) X509 certificates. ECDSA keys are smaller than equivalent-security RSA keys, resulting in better performance in uses such as Transport Layer Security (TLS). The .NET Framework implementation actually calls into the existing Windows functionality.

Here is an example of how the new approach can be used:

 

SQL Connectivity

Always Encrypted: Support for Hardware protected keys

ADO.NET now supports storing Always Encrypted column master keys natively in Hardware Security Modules (HSMs). With this support you can leverage asymmetric keys stored in HSMs without having to write custom column master key store providers and registering them in the applications. 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.

Improve MultisubnetFailover connection behavior for AlwaysOn

The SqlClient now automatically provides faster connection to AlwaysOn Availability Group that was introduced in SQL Server 2012. It transparently detects whether your application is connecting to an AlwaysOn availability group (AG) on different subnet and quickly discovers the current active server and provides connection to the server. Prior to this release, an application has to set connection string to include “MultisubnetFailover=true” to indicate that it is connecting to AlwaysOn Availability Group. Without turning on the connection keyword, an application might experience a timeout while connecting to AlwaysOn Availability Group. With this release, an application does NOT need to set MultisubnetFailover to true anymore. For more information about SqlClient support for AlwaysOn Availability Groups, see SqlClient Support for High Availability, Disaster Recovery

 

System.Transactions

Users of the Transaction.EnlistPromotableSinglePhase method can now utilize a different distributed transaction manager other than MSDTC to promote the transaction. This is accomplished by specifying a GUID transaction promoter identifier to a new variation of the Transaction.EnlistPromotableSinglePhase method. It this operation is successful, there are limitations placed on the capabilities of the Transaction.

Once a non-MSDTC transaction promoter is enlisted, the following methods will throw a TransactionPromotionException because these methods would require promotion to MSDTC by System.Transactions:

        Transaction.EnlistDurable

        TransactionInterop.GetDtcTransaction

        TransactionInterop.GetExportCookie

        TransactionInterop.GetTransmitterPropagationToken

        Serialization of a Transaction object

Once a non-MSDTC transaction promoter is enlisted, future durable enlistments must be made with that transaction promoter using protocols defined by that transaction promoter. The Guid of the transaction promoter can be obtained using the Transaction.PromoterId property. When the transaction promotes, the transaction promoter provides a byte[] referred to as the promoted token. An application can obtain the promoted token for a non-MSDTC promoted transaction with the Transaction.GetPromotedToken method.

Users of this new variation of the Transaction.EnlistPromotableSinglePhase method must follow a specific call sequence in order for the promotion operation to complete successfully. These rules are documented in the MSDN description of the new method.

You can view a code sample here.

 

Profiling

Better support for accessing PDBs in the IcorProfilerInfo Interface

With ASP.NET 5, it is much more common for assemblies to be compiled in-memory by Roslyn. For developers making profiling tools, this means that PDBs which historically were serialized on disk may no longer be present. Profiler tools often used PDBs to map code back to source lines for tasks such as code coverage or line by line performance analysis. In order to provide these profiler tools with access to the in-memory PDB data we have added additional functionality to the ICorProfiler set of APIs. 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.

Better instrumentation with ICorProfiler

We have improvements for profilers that are using ICorProfiler API’s ReJIT functionality for dynamic instrumentation. Previously such tools could instrument IL at any time, but metadata could only be modified at module load time. Because IL refers to metadata, this limited the kinds of instrumentation that could be done.

We have lifted some of those limits by supporting a sub-set of metadata edits after the module loads, in particular adding new AssemblyRef, TypeRef, TypeSpec, MemberRef, MemberSpec, and UserString records. With these changes a much broader range of on-the-fly instrumentation is possible.

 

Native Image Generator (NGEN) PDBs

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. With Ngen PDBs, Ngen can now create a PDB which contains the IL to native mapping without a dependency on the IL PDB. In cross-machine event tracing scenario, all that is needed is to copy the native image PDB, which is generated by Machine A, to Machine B, use DIA APIs to read 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. Since the native image PDB will be much smaller than all the modules and native images, the copy process from Machine A to Machine B will be much faster.

Using previous versions of the .NET Framework the user would have to copy all the modules and native images from the profiled machine to the analysis machine which contains the IL PDB to create the source to native mapping. While this process may work well for phone applications where the files are relatively small, the files can be very large on Desktop systems and will take significant time to copy.

 

Summary

With .NET Framework 4.6.1 we are moving ahead with our investments in several areas while continuing to deliver fixes that will substantially increase the reliability, stability, and performance of the product. Please try out the new release and reach out to us if you have any feedback.

A major driver for the work we’re doing in .NET 4.6.1 has been the feedback you have sent us for .NET 4.6. We have been actively listening to your feedback, so keep it coming, we greatly appreciate it.