See the products and operating systems that this article applies to.
This article describes hotfix rollup 3139550 that's available for the Microsoft .NET Framework 4.6.1 and the .NET Framework 4.6 on Windows 8.1, Windows RT 8.1, and Windows Server 2012 R2. For more information about the fixes in this hotfix rollup, see the "Issues that this hotfix rollup fixes" section.
The following files are available for download from the Microsoft Download Center:
Download the x86-based package now.
Download the x64-based package now.
For more information about how to download Microsoft support files, click the following article number to go to the article in the Microsoft Knowledge Base:
119591 How to obtain Microsoft support files from online services Microsoft scanned this file for viruses. Microsoft used the most current virus-detection software that was available on the date that the file was posted. The file is stored on security-enhanced servers that help prevent any unauthorized changes to the file.
To apply this hotfix, you must have the .NET Framework 4.6.1 or the .NET Framework 4.6 installed.
You have to restart the computer after you apply this hotfix if any affected files are being used. We recommend that you close all .NET Framework-based applications before you apply this hotfix.
Hotfix replacement information
This hotfix package doesn't replace a previously released hotfix package.
Issues that this hotfix rollup fixes
When a WPF application uses a TreeViewItem outside the context of a TreeView, the application can encounter an InvalidCastException exception whose stack trace starts as follows:
Note This exception occurs when the TreeViewItem is in a virtualized list control (for example, a ListBox, DataGrid, or ListView control) that tries to find the scroll offset of the TreeViewItem or one of its descendants. For example, this exception occurs if you declare a TreeViewItem as the root of a DataTemplate, and the DataTemplate is used as the CellTemplate of a DataGrid column.
Both System.Web.Caching and System.Runtime.Caching report the size of memory that's used by the whole AppDomain instead of the memory that's used by the cache items.
This is a regression from the .NET Framework 4.5 because of a change in the Timer implementation. In addition to reporting the wrong size, the additional objects that are referenced by the cache can significantly affect gen2 GC latency. In ASP.NET hosting scenarios, the cache also miscalculated the size of all caches in all app domains (as reported through a "Cache % Process Memory Limit Used" ASP.NET performance counter) when app domains were recycled.
This fix removes unintended references from the cache to the other app domain objects so that the correct size is reported. This fix also includes changes to improve the latency for System.Runtime.Caching on multi-core computers that are using Server GC. Additionally, after this fix is applied, the size of all caches in app domain recycling scenarios is calculated correctly.
When you have a Windows Presentation Foundation (WPF) application that relies on mouse promotion of touch moves to handle touch user interaction (instead of by directly using touch events), you may experience an unusually low volume of promoted mouse moves.
Previously, WPF throttled mouse promotion of touch moves to avoid having a large volume of touch moves overwhelm the dispatcher. In the .NET Framework 4.6.1, a fix was introduced to throttle the number of touch moves that are processed. After this change, the throttling of mouse promotions caused an additional reduction in the number of mouse moves that were generated. The throttling of mouse promotions is now removed so that there should be almost a one-to-one correspondence between touch move events and promoted mouse move events.
Assume that you're working on a WPF application that targets the .NET Framework 4.6. You try to set the CurrentThread.CurrentCulture or CurrentThread.CurrentUICulture value in any method that is invoked by the WPF Dispatcher by using a DispatcherOperation. For example, you try to set this value in a UI event handler or the MainWindow constructor. In this situation, the CurrentCulture and CurrentUICulture values are reset to their respective previous values at the end of the method. If an application sets CurrentUICulture in its MainWindow constructor or in a Button Click handler, that setting reverts to system UI culture.
This fix makes sure that the CurrentThread.CurrentCulture/CurrentUICulture values that are set in methods in a WPF application persist in the same manner as they did before the .NET Framework 4.6.
In the .NET Framework 4.6, a new flag, TaskContinuationOptions.RunContinuationsAsynchronously, is added to the Task library. However, when you use this flag together with Task.WhenAll, Task.WhenAny or Task.Unwrap, the flag has no effect. The flag was introduced to avoid certain deadlock conditions. This fix makes sure that all kinds of Task continuations respect the new flag.
In the .NET Framework 4.6, there's a bug in AppContext that causes the thread safety of the AppContext methods to be implemented incorrectly. AppContext is part of the infrastructure to reduce breaking changes. You can use AppContext to set and retrieve flags and to make decisions in your application based on that data.
This fix enables correct thread safety for the methods on AppContext that is related to setting and retrieving switch values.
When you encounter an edge case that has your allocation and survival pattern, and you require a new segment on your managed heap, a garbage collector can calculate a commit size that's smaller than it should. This causes an access violation during the compact phase because the garbage collector is trying to write to uncommitted memory.
This fix calculates the size correctly.
When you create native code for certain methods, the .NET Framework applications and NGEN processes may experience an unexpected crash.
RyuJit generates incorrect instructions to compare 16-bit unsigned integers on registers. It produces an incorrect result if input values have different MSB values and if compare instructions that are generated use register operands.
This fix generates correct instructions.
This article applies to the following:
Microsoft .NET Framework 4.6.1
Microsoft .NET Framework 4.6, when used with:
Windows RT 8.1
Windows Server 2012 R2 Datacenter
Windows Server 2012 R2 Essentials
Windows Server 2012 R2 for Embedded Systems
Windows Server 2012 R2 Foundation
Windows Server 2012 R2 Standard