.NET Framework 4.6 Release Notes ================================ .NET Framework release notes describe product improvements grouped by product area. Each change includes a Microsoft-internal VSTS bug number, which acts as a useful unique ID for each change (can be used to report issues or when calling Microsoft Support). Post-release servicing updates are also included, appended to the end of each product area. The following servicing updates have been included: - [May 2017](https://blogs.msdn.microsoft.com/dotnet/2017/05/17/net-framework-may-2017-preview-of-quality-rollup/) ## ASP.NET * State Service startup type is correctly persisted. [1038077] * Registry settings preserved during upgrade. [1038147] * Medium trust in ASP.NET 4.5 application doesn't cause execution permission exception. [1038337] * WebForm_DoCallback XHR doesn't break IDN support. [1040710] * .NET quirks and compatibility switches can be specified in ASP.NET configuration file. [1041102] * SignalR memory leak fixed. [1042247] * Quirks can be activated from ASP.NET even when a TFM is not specified. [1068433] * Membership UpdateUser and UpdateUserInfo don't cause SQL deadlock. [1131099] * Handles aborted XmlHttpRequest correctly. [983362] * ASP.NET allows config settings changes to affect CLR initialization. [994276] * HttpEncoder.UrlPathEncode doesn't encode the IDN part of the URL. [995259] * WebUIValidation.js correctly mapped on WebDev.WebServer 4.5.3. [998958] * Background flushes don't cause pipeline corruptions when using the TAP-friendly synchronization context. [1020085] * ASP.NET recognizes Edge browser. [1031688] * Databinding methods can be used in async binding. [1082492] * Removed a contention in System.Web.BufferAllocator. [1084913] * Setting request headers doesn't initialize ServerVariables. [1085748] * Fixed a crash in IIS Manager when opening content view. [1093488] * New web site template doesn't cause warnings. [1099514] * Browsing to an asmx file or wsdl with an IDN binding set in IIS doesn't cause a URI parsing exception. [110223] * Request validation can be completely disabled in an application. [412689] * EmailAddress attribute can load error message from resource. [468241] * GridView.CreateChildControl returns the correct CreatedRowCount when CustomPaging is enabled. [782891] * Custom output cache providers don't cause exception on cache policy settings serialization when more than one invalidation handler is present. [789904] * VaryByContentEncoding is now case-insensitive. [830641] * HttpContextWrapper.IsPostNotification returns the correct value based on pipeline event. [839206] * HtmlTextWriter renders
element as self-closing tag. [852940] * Posting invalid payload to ASP.NET with trace and 4.0 request validation enabled doesn't crash the worker process. [867196] * MemoryCache doesn't throw null reference expression when CacheItemPolicy.UpdateCallback is defined. [879799] * DiskBuildResultCache.CacheBuildResult has a null check for CompiledResult.ResultAssembly. [880034] * ContentDisposition constructor doesn't modify date values of the provided disposition string. [884362] * Calling MachineKey.Decode on ASP.NET application start or on first request doesn't throw null reference exception. [896595] * MemoryCache Trim method evicts all items. [902234] * Overloads of HttpUtility.UrlEncode and UrlEncodeToBytes taking (byte[] bytes, int offset, int count) respects the offset and count parameter values. [912606] * Setting culture to auto:* in web.config doesn't cause CultureNotFoundException. [714999] ## BCL * Projected DirectX value types can be marshalled to WinRT. [1166515] * New WeakReference() doesn't cause COMException. [973791] * Persian calendar is a supported formatting calendar, correctly handles part of day formatting, and uses correct era names. [1068336], [1117304], [1154104], [1087763] * DateTime Parse and TryParse behave the same on en-CA culture. [1117950] * AAD has integrated check for the pooled connection. [1118488] * French and Norwegian culture display name includes proper Unicode characters. [1147042] * ConcurrentDictionary serialization format changed, but is upwards compatible from .NET Framework 4.5 to .NET Framework 4.6. [1167398] * SqlBulkCopy truncates data before encrypting. [1159595] * GetProviderSpecificValue returns proper data type for encrypted columns when underlying data is null. [1159595] * French and Norwegian culture display name includes proper Unicode characters. [1147042] * X509Certificate2 supports Cng key pairs. [1158068], [1129677] * GDI+ reentrant paint operations fixed. [1075715] * System.Diagnostics.ProcessStartInfo can be deserialized. [1076704] * Culture resources added for newly supported Windows cultures. [1038210] * Current culture and UI culture travel through async calls. [1038253] * new TaskCompletionSource(null, TaskCreationOptions.RunContinuationsAsynchronously) doesn't throw ArgumentOutOfRangeException. [1042823] * WebSockets server doesn't cause false positive AccessViolation exceptions. [1064642] * FrameworkEventSource doesn't crash on Windows 7. [1067139] * EventSource.DecodeObject doesn't cause a crash on application launch. [1070394] * GetCurrentProcess() doesn't throw a SecurityException in a partial trust component. [1071695] * TimeZoneInfo correctly handles start and end of year transitions. [1072355] * Connections made using SPN in managed code don't fail with index out of range exception. [1120248] * XSD schema validation detects violation of unique constraint if compound key is used and one is empty. [1122756] * SqlSessionStateStore logs exception details when partition resolver is used. [1123428] * XsdDataContractImporter.Import method doesn't throw InvalidDataContractException when CanImport method returns true. [1124661] * RangeCheck enforces practical limits in order to avoid stack overflow. [1127981] * NetTcp with X509 certificates using SslStream allow negotiation for more secure cipher suites. [1128085] * TrustManager doesn't cause false warnings when comparing certificates. [1134066] * SqlBulkCopy works with TCE enabled columns. [1134668] * System.Runtime.Serialization.Primitives expose new public read-only properties for previously internal data contract attributes. [1136078] * Attribute.GetCustomAttributes doesn't throw AmbiguousMatchException when parameter types can disambiguate. [976721] * WinRtToNetFxStreamAdapter implements SetLength correctly. [977936] * Improved performance of System.IO.Path.GetFullPath and NormalizePath. [989059], [989062] * Improved performance of System.Version.ToString and TryParseVersion. [989081], [989086] * Security attributes added to Microsoft.JScriptEngine [991436] * ControlVersionInfo.ProductVersion doesn't throw null reference exception. [997521] * Encoding.GetEncoding gives clues about failure causes. [997703] * Introduced 1, 2, and 3-argument overloads of String.Format with IFormatProvider first argument to improve performance. [999405] * MemoryCache.AddOrGetExisting() checks the right expiration date. [999957] * Exception.Data on Windows 8 includes IRestrictedErrorInfo information. [1000662] * ReflectionModelServices.IsExportFactoryImportDefinition doesn't throw ArgumentException. [1005218] * Private GetRuntimeResourceString method added back to maintain compatibility of CompositeC1 CMS. [1005727] * AppDomainSetup.DynamicBase supported with UseRandomizedStringHashAlgorithm. [1008953] * Win32Exception shows a generic error message for messages longer than 256 characters. [1013367] * PreAuthenticate cache is effective beyond 100 URLs. [1014364] * CngKey members such as IsEphemeral don't throw CryptographicException on unsupported properties. [1014482] * Removed contention at BufferOutputAsyncStream for self-hosted WCF restful service using transfermode as Streamed. [1015747] * Added Array.Empty() to help avoid unnecessary allocations. [1020141] * HttpWebRequest succeeds when used with tracing against HTTPS endpoints with elliptic curve cryptography. [1020499] * JIT array of Single not initialized with Double values. [1027378] * Parallel.Invoke with one delegate executes on the current thread instead of queueing the work. [1027413] * SortOption uses the SortDirection passed in the constructor. [1030167] * Fixed timezone conversion in cases when year start or end with daylight savings wasn't correctly handled. [1079914] * Fixed AssemblyInformationalVersion. [1082536] * Fixed serialization and de-serialization of DateTime with daylight savings and special values. [1087198] * IO exceptions moved to System.Runtime. [1090978] * CultureInfo.CurrentCulture setter works in APPX mode. [1091999] * ParameterBuilder.SetConstant(null) doesn't throw argument exception for a nullable value type's default value. [1098429] * GetClassLayout can be called from rejit instrumentation. [1101065] * GetTypeForTypeID doesn't lock exe of the process being debugged. [1101402] * Euro is now the currency for Lithuania. [1102772] * Idnhost property of Uri class is now public. [1103357] * Fixed issues from initial use of EventSource's activity tracing capability. [1103452] * Fixed SqlHierarchyId operation failure due to invalid binary string. [1106619] * ToolboxItem.Equals optimized. [1106966] * Removed AppVerifier false positives in ISAPI mode. [1108193] * SQL connection strings greater than 779 characters don't cause application crash. [1109784] * Improved debuggability when users create incorrect EventSources. [1109972] * AsyncLocal.Value doesn't lose value when ExecutionContext is modified inside an async method. [1111403] * Removed unused BinaryCompatibility.TargetsAtLeast_Desktop_v4_5_3 from System.Diagnostics.Eventing.EventSource and System.Xml. [1111861] * SqlException can be caught. [1112280] * System.Windows.Diagnostics.VisualDiagnostics.GetXamlSourceInfo supports non-DependencyObjects. [1116127] * CancellationToken.Register doesn't throw ObjectDisposedException when its CancellationTokenSource is disposed. [369196] * System.IO.Path performance improved by not boxing characters and then calling ToString. [467858] * Subdomain cookies are correctly handled by CookieContainer. [520819] * Decimal parsing can handle [-]0eN where N > 0. [568475] * Fixed Lybian time zone daylight savings initial transition. [698652] * Made BinaryCompatibility internal. [808512] * Fixed InvalidDataException when using ZipArchive.GetEntry. [823402] * Improved performance of System.Guid.ToString by using fast string allocation instead of new char[]. [825882] * System.Threading.Gen2GcCallback finalizer checks for uninitialized GCHandle before using it. [837365] * Fixed four unlocalized strings in DAN and JPN cultures. [840067] * XmlEncodeRawTextWriter and XmlUTF8RawTextWriter are checking for invalid surrogate pairs correctly. [851030] * Implemented public static unsafe Buffer.MemoryCopy. [862315] * Improved performance of String.Format and StringBuilder.AppendFormat by avoiding object array allocations. [915876] * Removed a bottleneck in System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid by removing a lock. [921828] * DpapiDataProtector doesn't fail because of SHA256.Create() when FIPS compliance is mandatory. [923431] * Improved System.Design!System.ComponentModel.MenuCommandService.FindCommand by avoiding the boxing of Guids. [925312] * Eliminated implicit allocationof WaitCallback objects by caching the delegate in a static field. [925992] * Eliminated a hang in HttpClient when an exception is thrown during BeginRequestStream. [926740] * Unix date time strings are now supported through DateTimeOffset.FromUnixTimeSeconds, FromUnixTimeMilliseconds, and ToUnixTimeMilliseconds. [933584] * Improved performance by using StringBuilderCache in Environment.GetEnvironmentVariable. [934009] * Fixed ArgumentOutOfRangeException in IPAddress.MapToIPv4(). [944709] * Read-only interfaces are implemented on collection types HashSet, LinkedList, Queue, SortedDictionary, SortedList, SortedSet, and Stack. [944715] * AddOnSendingHeaders doesn't fire prematurely. [952802] * EventSource doesn't aggressively fail when using reserved keywords. [955350] * Eliminated a leak when calling IReflect.InvokeMemberon a native IDispatchEX implementation through IReflect or IExpando. [957933] * IsolatedStorage feature works when configured to place storage on roaming profiles. [961127] * Text encoding is extensible. [963034] * Fixed the size of Vector. [1020874] * System.Drawing.Icon.ToBitmap() supports PNG framed icons. [1084802] * Uri constructor doesn't throw ArgumentOutOfRangeException when parsing certain URIs with escaped international characters. [1173958] * When using RSACng (or another class which directly or indirectly uses RSACng) to perform encryption using RSAEncryptionPadding.Pkcs1 when the private key is stored on a smartcard (or other hardware security module) an exception of System.Security.Cryptography.CryptographicException: The parameter is incorrect. at System.Security.Cryptography.NCryptNative.DecryptData[T](SafeNCryptKeyHandle key, Byte[] data, T& paddingInfo, AsymmetricPaddingMode paddingMode, NCryptDecryptor`1 decryptor) [299303] [Added: May 2017] ## CLR * AppContext values can be overridden by registry settings. [1076165] * Asmx service references can be added to store apps. [1078198] * CrossGen and NGen create identical System.Core native images. [1033601] * ICorProfilerCallback6 doesn't leak reference count. [1038285] * Loading design-time metadata at debug time for universal Windows apps is supported. [1038300] * Multi-core JIT doesn't deadlock from loop of structs and hang Visual Studio. [1043199] * ICorDebug heap enumeration doesn't skip objects. [1063297] * WinMDExp/CCI allow reading record kind 0x5/0x6. [1073349] * ETW tracing for WebRequest works reliably when garbage collection happens. [1136690] * Fixed a deadlock in case of StackOverflow. [1138065] * Improved performance reading from the redirected output stream. [997190] * Product version is correct in binaries' properties. [997577] * RyuJIT is on by default. [10175592], [1020209] * Only one GC/Start ETW event is triggered for each GC. [1020142] * Fixed issue with wrong processor architecture being recorded on non-GAC assemblies, causing them to fail loading. [1020167] * No opportunistic tail calls when there are pinned variables. [1020867] * RyuJIT correctly handles edit and continue on instance synchronized methods. [1020967] * Fixed x64 JIT assignment to struct, where LHS also appears on RHS. [1021056] * CLR checks assembly architecture when skip IL loading feature is enabled. [1024293] * Native images generated by CrossGen for .NET Framework have processor architecture data. [1028975] * CLR emits all versions of the ModuleLoad/ModuleUnload ETW events. [1029164] * Future DFL and FFL handled. [1030154] * Unresolvable SID in SDSAM handled. [1030161] * Crossgen / ReadyToRun images are treated as IL by CLR. [1084749] * Fixed a RyuJIT regression causing System.Web.HttpApplication.ExecuteStep to incorrectly handle exceptions associated with redirections. [1088278] * Setup doesn't disable CAPI2 event logs. [1090378] * WindowsBase uses C# exception filters. [1090886] * Libraries can define switches without modifying mscorlib. [1092007] * No GC regions can be specified. [1096946] * Fixed lock ordering violation between rejit lock and ETW rundown. [1104691] * NGen compresses native images on devices with limited amount of disk space. [1107517] * TargetFrameworkAttribute is not always null for non-default AppDomains. [430136] * Sos.dll dumpheap reports correct TotalSize. [484532] * Lc.exe can handle response files. [621761] * MixedMode debugging a Windows Store C# application that calls a C++/CX WinRT component doesn't cause and access violation. [764121] * Fixed access violation caused by WinRT class names without namespace. [738932] * Fixed breaking change in COR_PRF_GC_ROOT_HANDLE values. [800872] * Improved free list efficiency in Gen2 garbage collection. [841334] * Made heap_of less expensive for server GC. [896400] * GC datastructure isn't made unreasonably large when the new segment's address is far from the existing ones (64-bit). [897049] * Win32Native.MEMORYSTATUSEX is a struct, not a class. [899371] * Eliminated a deadlock condition in RuntimeResourceSet. [905813] * _Delegate* also has IDispatch vtable entries for non-generic delegates. [922080] * Module rundown events are generated before method rundown events, improving performance. [939400] * CLR returns rejit info after first rejit. [952954] * Fixed the performance for enums based on primitive integral types other than int while maintaining the roundtrip between 4.0 and 4.5. [965865] * .NET Framework Setup UI correctly scales controls in high DPI. [968115] * SIMD types in System.Numerics.dll are recognized by the JIT. [1168471] ## Entity Framework * Entity data source can be configured without causing an exception about the provider not returning a ProviderManifest instance. [810937] ## WCF * Adding a service reference to a class library doesn't cause compilation errors. [1063611] * CustomBinding honors security header layout mode of Lax / LaxTimeStampLast. [1136398] * DataContractSerializer doesn't throw InvalidCastException on StringDictionary serialization. [1008489] * Fixed that WCF friendly instance names limited to 64 characters could cause false duplicates as instance names support up to 128 characters. [1022700] * Roles.GetRolesForUser() doesn't throw NullReferenceException in a WCF service hosted in ASP.NET with the AspNetCompatibilityEnabled flag set to false. [1022754] * ProcessMessage31 uses cached delegate for ProcessMessage4. [1030713] * System.ServiceModel.Syndication.SyndicationFeed can parse . [1088425] * Client certificate information is added as claim by default. [1103426] * Warning message added if users enable "wcf:ensureUniquePerformanceCounterInstanceNames" app setting without the user hosting the service having the proper permissions. [1108004] * Fixed null reference and access violation exceptions in System.ServiceModel.Channels.MessageHeaders.GetBufferedMessageHeaderReaderAtHeaderContents. [1116949] * WebResponseInputStream doesn't swallow the exception stating that the stream doesn't support read timeouts. [288814] * Auto-generated help produces correct links. [852865] * Added a keep-alive timeout on WCF ServiceHost. [948289] * Fixed a null reference exception in System.Runtime.Serialization when ETW is enabled. [1137758] ## Windows Forms * Icon.ToBitmap() supports PNG framed icons. [1074253] * Adding large image to resource file doesn't cause error in 300% high DPI mode. [1096726] * System.Windows.Input.Cursor supports multi-image cursor files. [673619] * Closing a parent form in MDI applications doesn't throw System.ComponentModel.Win32Exception (Error creating window handle) [847648] * Fixed a null reference exception when messages continue arriving after a native tooltip window has been disposed. [933930] * Using custom MessageFilter doesn't cause sporadic IndexOutOfRangeException in ThreadContext. [1072924] * WIT grid's sorting arrows scale for high DPI. [745286] * NumericUpDown scroll buttons scale for high DPI. [906184] ## Workflow * WorkflowService design-time validation can be cancelled. [1162560] * ActivityExecutor.OnExecuteWorkItem has improved performance on RyuJIT. [1136333], [1136377] * Improvements to out-of-sequence calls in WF State Machine [1018947] * Added synchronization to DynamicModuleManager to prevent debugger from crashing the debugged application. [1112002] * Default TransactionException extended to include the distributed transaction ID in error message. [954268] * Workflow Foundation implementation for SQL better handles transient database errors. [1152472] ## WPF * Selecting a XAML element with an empty start tag doesn't select its first child instead. [1117943] * Retrieving the font family name for DengXian in WPF doesn't cause an argument exception. [1153238] * Data grid row headers can be right-clicked without changing the current row selection. [1064465] * GlyphRun.InkBoundingBox() and FormattedText.Extent return the same values. [1068545] * RibbonGroup background is not transparent. [1119792], [1119821] * PrintQueue.GetPrintCapabilities doesn't cause memory leak. [1134697] * TreeView doesn't scroll to random position when nodes are expanded and collapsed repeatedly. [1137957] * Running MultipleTopWindows cross AppDomain on Windows 8 and 10 doesn't throw. [1138471] * Debugging WPF in browser application doesn't cause SecurityException in PresentationFramework.dll. [1145697] * List virtualization doesn't cause crash in GitHub for Windows. [992770] * Scrolling in virtualized DataGrid with items of different heights doesn't cause ArgumentNullException. [996725] * WriteableBitmap isn't causing leaks of CWriteProtectedBitmap virtual memory. [997584] * Selection doesn't incorrectly include the previously selected item when moving selection of ListBoxItem bound to ObservableCollection. [999613] * Fixed a UI thread deadlock in pen input code. [1010998] * Margins set in sections in FlowDocuments are respected. [1104560] * Scaling doesn't suffer from rounding errors on odd DPI. [1104807] * Improved thread safety when loading the same XAML resource for the first time in multiple UI threads. [12520] * Touch and stylus events don't stop firing after disconnecting then reconnecting to a remote desktop session. [659672] * Fixed a bouncing scrollbar with custom WPF DataTemplate. [759702] * GetFixedDocumentSequence doesn't throw with error message "UnicodeString property does not contain enough characters to correspond to the contents of Indices property." [796882] * Fixed slow and jumping WPF TreeView issue. [810163] * Fixed overflow exception in WPF System.ServiceModel.Channels.TransmissionStrategy.AddToWindow. [811734] * Fixed InvalidOperationException in multithread application by synchronizing access to the static Stack<> that holds SerializationContext for recycling. [834091] * Snapping and unsnapping the keyboard on a Surface Pro doesn't cause null reference exception in WPF touch input stack. [839668] * TreeView doesn't vanish after node collapse and expand. [888530] * Selected items in a WPF ListBox or ListView control are correct when items.refresh is called from code behind. [945407] * Fixed performance regression in WPF applications caused by the loading of three additional assemblies. [946388] * XamlBuildTask doesn't sporadically report error "Object '' has been disconnected or does not exist at the server" on TFS builds. [955825] * Fixed exception at CaretElement.ConvertToInt32 in WPF TextBox.Focus. [958636] * WPF uses the most recent distance threshold from the registry for recognizing double taps. [959263] * WPF allows for transparent child windows. [959266] * Fixed FlowDocument exception "this TextNavigator has no scoping text element." [960678] * FlowDocument preserves spaces after being saved using XamlWrite. [960699] * Improved UI scrolling when using a virtualized ListView with a pixel scroll unit. [965665] * Fixed null reference exceptions in WPF System.Windows.Controls.ItemContainerGenerator.ContainerFromIndex. [966623] * Improved touch services. [971187] * Fixed RichTextBox spell checking issue with possessives. [1170165] * Window chrome doesn't turn black on maximize with GlassFrameThickness -1. [1176703] * Improved RichTextBox typing performance on low-end GPUs. [1177602] * Applications continue to promote touch events to click after digitizer is removed and reconnected while touching the digitizer. [1186170] * A WPF application with a virtualizing list control (ListBox, DataGrid, TreeView, etc.) can encounter an ArgumentNullException when scrolling to an item whose size has substantially decreased since the last time it was re-virtualized. [273803, 282662, 282664, 367282, 367285] [Added: May 2017]