Today we are excited to announce the availability of the .NET Framework 4.6.2! Many of the changes are based on your feedback, including those submitted on UserVoice and Connect. Thanks for your continued help and engagement!
The release is packed with lots of great improvements in the following areas:
- Base Class Library
- Common Language Runtime
- ClickOnce
- ASP.NET
- SQL
- Windows Presentation Foundation
- Windows Communication Foundation
You can see the full set of changes in the .NET Framework 4.6.2 change list and API diff.
Download Now
You can download the .NET Framework 4.6.2 now:
- .NET Framework 4.6.2 Web Installer – Quickest Install. Requires an internet connection.
- .NET Framework 4.6.2 Offline Installer – All-inclusive installer (includes all language packs). Does not require an internet connection.
- .NET Framework 4.6.2 Developer Pack – For development and build environments (includes Offline Installer and the 4.6.2 targeting pack). Does not require an internet connection.
Base Class Library (BCL)
The following improvements have been made in the BCL.
Long Path Support (MAXPATH
)
We fixed the 260 character (MAXPATH) file name length limitation in the System.IO APIs. Over 4500 of you voted for this issue on UserVoice!
This limitation doesn’t usually affect consumer applications (for example, loading files out of “My Documents”), but is more common on developer machines that build deeply nested source trees or use specialized tools that also run on Unix (where long paths are much more common).
This new capability is enabled for applications that target the .NET Framework 4.6.2 (or later). You can configure an application to target the .NET Framework 4.6.2 with the following app.config or web.config configuration file:
You can opt applications that target an earlier version of the .NET Framework into using this functionality by setting an AppContext switch, as demonstrated in the following configuration file. The switch will only be honored when an application in running on the .NET Framework 4.6.2 (or later).
The absence of targeting the .NET Framework 4.6.2 or setting the AppContext switch results in the existing behavior of being blocked from using paths longer than MAXPATH. The behavior is opt-in to maintain backwards compatibility for existing applications.
The following improvements were made to enable long paths:
- Allow paths that are greater than 260 character (MAX_PATH). Paths that are longer than
MAX_PATH
are allowed by the BCL. The BCL APIs rely on the underlying Win32 file APIs for limitation checks. - Enable extended path syntax and file namespaces (
\\?\
,\\.\
). Windows exposes multiple file namespaces that enable alternate path schemes, such as the extended path syntax, which allows paths to just over 32k characters. The BCL now supports these paths, such as the following:\\?\very long path
. The .NET Framework now primarily relies on Windows for path normalization, treating it as the “source of truth”, to avoid inadvertently blocking legitimate paths. The extended path syntax is a good workaround for Windows versions that don’t support long paths using the regular form (for example, `C:\very long path’). - Performance Improvements. The adoption of Windows path normalization and the reduction of similar logic in the BCL has resulted in overall performance improvements for logic related to file paths. Other related performance improvements have also been made.
More details on these changes can be found on Jeremy Kuhne’s blog.
X509 Certificates Now Support FIPS 186-3 Digital Signature Algorithm
The .NET Framework 4.6.2 adds support for FIPS 186-3 Digital Signature Algorithm (DSA). This support enables X509 certificates with keys that exceed 1024-bit. It also enables computing signatures with the SHA-2 family of hash algorithms (SHA256, SHA384, and SHA512).
The .NET Framework 4.6.1 supports FIPS 186-2, which is limited to keys no greater than 1024-bit.
You can take advantage of FIPS 186-3 support by using the new DSACng class, as you can see in the example below.
The DSA base class has also been updated so you can you use FIPS 186-3 support without casting to the new DSACng class. This is the same as the approach that was used for updating RSA and ECDsa implementations, in the two previous .NET Framework releases.
Improved Usability of Elliptic Curve Diffie-Hellman Key Derivation Routines
The usability of the ECDiffieHellmanCng class has been improved. The .NET Framework Elliptic Curve Diffie-Hellman (ECDH) Key Agreement implementation includes three different Key Derivation Function (KDF) routines. These KDF routines are now represented and supported by three different methods, as you can see in the example below.
In previous .NET Framework versions, you had to know which subset of properties to set on the ECDiffieHellmanCng class for each of the three different routines.
Support for Persisted-Key Symmetric Encryption
The Windows Cryptography Library (CNG) supports storing persisted symmetric keys on software and hardware devices. The .NET Framework now exposes this CNG capability, as you can see demonstrated in the example below.
You need to use the concrete implementation classes, such as AesCng to use this new capability, as opposed to the more common factory approach, Aes.Create(). This requirement is due to key names and key providers being implementation-specific
Persisted-key symmetric encryption has been added for the AES and 3DES algorithms, in the AesCng TripleDESCng classes, respectively.
SignedXml Support for SHA-2 Hashing
The .NET Framework SignedXml implementation now supports the following SHA-2 Hashing algorithms:
- RSA-SHA256
- RSA-SHA384
- RSA-SHA512 PKCS#1 signature methods
- SHA256
- SHA384
- SHA512 reference digest algorithms
You can see an example of signing XML with SHA-256 in the example below.
The new SignedXML URI constants have been added as new SignedXml fields. The new fields are shown below.
Any programs which 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 should no longer be necessary.
Common Language Runtime (CLR)
The following improvements have been made in the CLR.
NullReferenceException Improvements
You have probably experienced and investigated the cause of a NullReferenceException. We are part-way through partnering with the Visual Studio team to provide a better debugging experience for null references in a future Visual Studio release.
The debugging experience in Visual Studio relies on the Common Language Runtime debugging APIs for low-level interaction with your code. Today, the NullReferenceException
experience in Visual Studio looks like this:
In this release, we extended the CLR debugging APIs to enable the debugger to request more information and perform additional analysis when a NullReferenceException
occurs. Using this information, a debugger will be able to determine which reference is null
and provide this information to you, making your job easier.
ClickOnce
The following improvements have been made in ClickOnce.
Transport Layer Security (TLS) 1.1 and 1.2 Support
We added support for TLS 1.1 and 1.2 protocols in ClickOnce for .NET Framework versions 4.6.2, 4.6.1, 4.6 and 4.5.2. We would like to thank those who voted for it on UserVoice! You do not need to do any extra steps to enable TLS 1.1 or 1.2 support as ClickOnce will automatically detect which TLS protocol is required at runtime.
Secure Sockets Layer (SSL) and TLS 1.0 are no longer recommended or supported by some organizations. For example, the Payment Card Industry Security Standards Council is in the process of requiring TLS 1.1 or higher for online transactions that meet their specifications.
ClickOnce continues to support TLS 1.0 for applications that do not or cannot upgrade, for compatibility. We recommend analyzing all of your uses of SSL and TLS 1.0. See the KB articles for links to download the hotfix .NET Framework versions 4.6, 4.6.1 and 4.5.2.
Client Certificate Support
ClickOnce applications can now be hosted in virtual directories with SSL enabled and with client certificates required. In that configuration, end users will be prompted to select their certificate when accessing an application. ClickOnce will not prompt for a certificate if the Client Certificates
setting is set to “Ignore”.
In previous versions, ClickOnce deployments were terminated with an access denied error when applications where hosted this way.
ASP.NET
The following improvements have been made in ASP.NET. See Announcing ASP.NET Core 1.0 to learn about improvements in ASP.NET Core.
DataAnnotation Localization
Localization is now much easier when using model binding and DataAnnotiation
validation. ASP.NET has adopted a simple convention for resx resource files that contain DataAnnotation
validation messages:
- Located in the
App_LocalResources
folder. - Follow the
DataAnnotation.Localization.{locale}.resx
naming convention.
Using the .NET Framework 4.6.2, you specify DataAnnotation
attributes in your model file just like you would in an un-localized application. For the ErrorMessage
, you specify the name that you will use in resx file, as you can see in the example below:
You can see that localized resx files have been placed in the ‘App_LocalResources’ folder, following the new convention, in the example below:
You can also plug in your own stringlocalizer provider to store the localized strings in another location or file type.
In previous .NET Framework versions, you would need to specify ErrorMessageResourceType
and ErrorMessageResourceName
values, as you can see in the example below.
Async Improvements
SessionStateModule and Output-Cache Module have been improved to enable async scenarios. The team is working on releasing async versions of both modules via NuGet, which will need to be imported into an existing project. Both NuGet packages are anticipated to release within the coming weeks. We will update this post when that happens.
SessionStateModule Interfaces
Session State allows you to store and retrieve user session data as a user navigates an ASP.NET site. You can now create your own async Session State Module implementation using the new ISessionStateModule
interface, enabling you to store session data in your own way and use async methods.
Output-Cache Module
Output Caching can dramatically improve the performance of an ASP.NET application by caching the result returned from a controller action to avoid unnecessarily generating the same content for every request.
You can now use async APIs with Output Caching by implementing a new interface called OutputCacheProviderAsync
. Doing so will reduce thread-blocking on a web server and improve scalability of an ASP.NET service.
SQL
The following improvements have been made in the SQL client.
Always Encrypted Enhancements
Always Encrypted is a feature designed to protect sensitive data, such as credit card numbers or national identification numbers that are stored in a database. It allows clients to encrypt sensitive data inside client applications, never revealing the encryption keys to the database engine. As a result, Always Encrypted provides a separation between those who own the data (and can view it) and those who manage the data (but should have no access).
The .NET Framework Data Provider for SQL Server (System.Data.SqlClient) introduces two important enhancements for Always Encrypted around performance and security.
Performance
To improve performance of parameterized queries against encrypted database columns, encryption metadata for query parameters is now cached. Database clients retrieve parameter metadata from the server only once when theSqlConnection::ColumnEncryptionQueryMetadataCacheEnabled property is set to true (the default), even if the same query is called multiple times.
Security
Column encryption key entries in the key cache are now evicted after a configurable time interval. The time interval can be set using the SqlConnection::ColumnEncryptionKeyCacheTtl property.
Windows Communication Foundation (WCF)
The following improvements have been made in WCF.
NetNamedPipeBinding Best Match
In .NET 4.6.2, NetNamedPipeBinding has been enhanced to support a new pipe lookup, known as “Best Match”. When using “Best Match”, the NetNamedPipeBinding service will force clients to search for the service listening at the best matching URI to their requested endpoint, rather than the first matching service found.
The “Best Match” pipe is particularly useful if a WCF client app tries to connect to the wrong URI when using the default “First Match” behavior. In certain situations, when there is more than one WCF Services listening on named pipes, WCF clients using “First Match” could be connected to a wrong service. This could happen if some of the services is hosted by an administrator account.
To enable this feature, you can add the following AppSetting to your client application’s App.config or Web.config file:
DataContractJsonSerializer Improvements
The DataContractJsonSerializer has been improved to better support multiple daylight saving time adjustment rules. When enabled, DataContractJsonSerializer will use the TimeZoneInfo class instead of the TimeZone class. The TimeZoneInfo class supports multiple adjustment rules, which makes it possible to work with historic time zone data. This is useful when a time zone has different daylight saving time adjustment rules, such as (UTC+2) Istanbul.
You can enable this feature by adding the following AppSetting to the app.config file:
TransportDefaults No Longer Supports SSL 3
The SSL 3 protocol is no longer a default protocol used for negotiating a secure connection when using NetTcp with transport security and a credential type of certificate. In most cases there should be no impact to existing applications, since TLS 1.0 has always been included in the default protocol list for NetTcp. All existing clients should be able to negotiate a connection using at least TLS 1.0.
SSL3 was removed as a default protocol since it is not longer considered secure. While not recommended, one of the following configuration mechanisms can be used to add SSL 3 back to the list of negotiated protocols if it is required for your deployment:
- SslStreamSecurityBindingElement.SslProtocols Property
- TcpTransportSecurity.SslProtocols Property
<transport>
section of<netTcpBinding>
<sslStreamSecurity>
section of<customBinding>
Transport Security for Windows Cryptography Library (CNG)
Transport Security now supports certificates stored using the Windows cryptography library (CNG). Currently, this support is limited to using certificates with a public key which has an exponent no more than 32bits in length.
This new capability is enabled for applications that target the .NET Framework 4.6.2 (or later). You can configure an application to target the .NET Framework 4.6.2 with the following app.config or web.config configuration file:
You can opt applications that target an earlier version of the .NET Framework into using this functionality by setting an AppContext switch, as demonstrated in the following configuration file. The switch will only be honored when an application in running on the .NET Framework 4.6.2 (or later).
You can also enable this functionality programmatically:
OperationContext.Current Async Improvements
WCF now has the ability to include OperationContext.Current with ExecutionContext so that the OperationContext flows through asynchronous continuations. With this improvement, WCF allows CurrentContext to propagate from one thread to another thread. This means that even if there’s a context switch between calls to OperationContext.Current, it’s value will flow correctly throughout the execution of the method.
The following example demonstrates OperationContext.Current flowing correctly across a thread transition:
Previously, the internal implementation of OperationContext.Current was to store the CurrentContext using a ThreadStatic variable, which used the thread’s local storage to store the data associated with CurrentContext. If there was a change in the execution context of the method call (i.e. a thread change caused by awaiting another operation), any subsequent calls would be operating on a different thread without a reference to the original value. With the fix, the second call to OperationContext.Current will deliver the expected value even though threadId1 and threadId2 may be different.
Windows Presentation Foundation (WPF)
The following improvements have been made in WPF.
Group Sorting
An application that requests a CollectionView to group data can now explicitly declare how to sort the groups. This overcomes some unintuitive ordering that can arise when the application dynamically adds or removes groups, or when the application 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.
The feature includes two new properties on the GroupDescription class: SortDescriptions
and CustomSort
. These properties describe how to sort the collection of groups produced by the GroupDescription
, analogous to the way the properties onListCollectionView
with the same names describe how to sort the data items. There are also two new static properties on the PropertyGroupDescription
class for use in the most common cases: CompareNameAscending
and CompareNameDescending
.
For example, suppose an application wants to group data by Age, sorting the groups in ascending order and the items within each group by LastName.
With this new feature the application can now declare:
Prior to this feature, the application would declare:
Per-Monitor DPI Support
WPF applications are now enabled for per-monitor DPI awareness. This improvement is critical for scenarios where multiple displays of varying DPI level are attached to a single machine. As all or part of a WPF application is transitioned between monitors, the expected behavior is for WPF to automatically match the DPI of the app to the screen. It now does.
You can learn more about how to enable your WPF application to become per-monitor DPI aware in the WPF samples and developer guide on GitHub.
In previous versions, you would have to write additional native code to enable per-monitor DPI awareness in WPF applications.
Soft Keyboard Support
Soft Keyboard support enables automatic invocation and dismissal of the touch keyboard in WPF applications without disabling WPF stylus/touch support on Windows 10.
In previous versions, WPF applications did not implicitly support the invocation or dismissal of the touch keyboard without disabling WPF stylus/touch support. This is due to a change in the way the touch keyboard tracks focus in applications starting in Windows 8.
Your Feedback
Once again, we would like to thank everyone who provided feedback on the 4.6.2 preview release! It has been instrumental in making 4.6.2 a great release. Please continue to direct your feedback towards the following places:
After many years the legacy MAX_PATH limitation is gone. Thanks ! Will also MSBuild and Visual Studio take advantage of it ?
Not yet. Getting the blocks removed from .NET is the first step to making MAX_PATH a thing of the past. Another important piece is that Windows has also unblocked long paths in the Summer Update for Windows 10. (See my blog on how to enable the support in Windows. https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/)
PowerShell is the first useful tool that has opted into this new support. Much more is in the pipeline.
That’s the plan. Long paths will work if (1) the OS supports it and (2) the app is targeting .NET Framework 4.6.2. However, it’s important to keep in mind that Windows is large not every API and component will support long paths but we consider those bugs at this point. Same is true with .NET itself. We haven’t yet updated the VM to support loading DLLs on long paths. So take this feature in .NET Framework 4.6.2 as a large step in the right direction, but don’t expect that Long Path issues are completely gone yet.
Deeper details of .NET 4.6.2 and .NET Core 1.0 long path support can be found on my blog. I’m happy to answer any questions you might have and give feedback on scenarios you might be encountering. Prioritizing our continuing work benefits greatly from feedback.
Can I ask for clarification on long path support please?
In the above post is says:
“Allow paths that are greater than 260 character (MAX_PATH). Paths that are longer than MAX_PATH are allowed by the BCL. The BCL APIs rely on the underlying Win32 file APIs for limitation checks.”
If the Win32 APIs have not been updated to remove the MAX_PATH check then surely long path support is not going to work even if the BCL has changed?
In addition, you say long paths are only supported if the underlying OS supports long paths?
As far as I know the only operating systems that supports long paths today is Windows 10 anniversary edition. Does this mean that applications running on Windows Server 2012 R2 will not support long paths even if they are targeting .NET framework 4.6.2?
A compatibility matrix showing OS and .NET version would be very useful.
The only OS that supports long paths without you doing any extra work (other than enabling the feature) is Windows 10 Anniversary Edition. You can, however, use long paths on any OS if you use the \\?\ syntax which is now supported by this feature.
You can look at my blog posts for tons of details on what works and how it works. With the feature turned on .NET doesn’t preemptively check path length as it used to (in Path.GetFullPath). If you call any other API that actually hits the disk, the OS will return an error if you’re not using \\?\ or if it doesn’t have the feature (or it’s disabled) and .NET will surface this as PathTooLong.
.NET Core does the \\?\ work for you. We want to do the same thing in 4.x, but we currently don’t have a timeframe for it.
One final note- IsolatedStorage already worked with long paths on 4.x (on all OSes).
Thanks for the clarification. Given that Windows 10 is a client OS and the problems (for us at least) surface in server editions predominately are you aware of any plans to back port this feature into Windows Server 2012 R2?
I appreciate this is a “Windows” thing rather than a .NET thing however for the customers that’s really irrelevant – we just want it to work in our applications and platforms.
Any links you can share on the plans to resolve this in the Windows Server world – 2012 or 2016 would be useful.
Thanks for looking at this problem, after many years of it being ignored it’s great to see it finally being dealt with.
I have nothing specific I can share on Server, but I would expect that the changes will come in Server as well. It is the same codebase after all.
I really can’t speak for the Windows team, but I doubt they’ll back port their changes- perhaps with strong feedback that shows how specific scenarios can be met with this initial support.
Personally I’d rather see them put cycles towards getting the rest of the story fixed _first_ if given a choice (CMD, shell, etc.). There is so much more that needs done before we can effectively be “done” with MAX_PATH in the same way we are “done” with 8.3 file names- and that level of back porting would be a huge amount of risky work. Practically it doesn’t seem possible although I’m totally with you on the desire for it- I’ve wanted this gone for many, many years. 🙂
If it helps any I can tell you additional work *is* being done. There have long been advocates for this space around MS and we will continue to push on the problem. Keep your feedback coming- the more user feedback we get the easier it is to prioritize this work against other features.
Hey,
In the sample for the path switch you used incorrect runtime version:
But it should be according to the description
oh, thank you, html tags remover.
incorrect – supportedRuntime version=”.NETFramework,Version=v4.5.2″
correct – supportedRuntime version=”.NETFramework,Version=v4.6.2″
Actually you misunderstood his example, he was giving an example for when you target a lower level runtime. 4.5.2 is a correct example of a lower level runtime. In this case you need to set the additional AppContextSwitchOverride (as in the example) which would not be necessary when he targeted 4.6.2 only.
With the 4.6.2 being non-supported for many products (Exchange a.o.), why didn’t the team introduce a ‘BlockNetFramework462’ registry key to prevent (accidental) installation of this version, the same thing that was available for 4.6.1. There are still folks out there thinking ‘higher version = better’, possibly resulting in unsupported configs, or messed up applications.
For all versions of 4.x, potentially behavior breaking changes (such as the long path support) are behind compatibility switches. Applications don’t get these changes without explicitly opting in by either retargeting to the latest version and/or setting the relevant compat switches. You shouldn’t accidentally stumble into enabling these.
Jeremy. Regardless of “compatibility switches”, .NET Framework 4.6.1 caused issues for applications such as Exchange. e.g. https://blogs.technet.microsoft.com/exchange/2016/02/10/on-net-framework-4-6-1-and-exchange-compatibility/ At that time we were advised to remove 4.6.1 and as Michel indicated we here in the real world could use the ‘BlockNetFramework462’ registry key to block its installation on our application servers.
You response to Michel seems to imply that a new version of .NET such as 4.6.2 cannot cause an issue with an application and if it does, its due to a problem lies with the application. Is that what you are saying?
Regardless, is there or will there be a switch that will block installation of 4.6.2 if there is any doubt about its compatibility with a particular application ?
I might be missing something. Does the NRE screencap show exception messaging *before* 4.6.2 or *with* 4.6.2? This looks to be the same as existing messaging (I might have expected information about *what* was null).
But otherwise, excellent release! Congrats team!
If anyone else is curious, targeting 4.6.2, I made a toy app with a Foo.Bar.Baz.Thing1.Thing2 call with an NRE somewhere in there and still got the old, general NRE messaging. Reading between the lines in the release notes, it seems that 4.6.2 provides the debugger API with the call location messaging, but the VS debugger might be updated to consume it.
Could anyone correct me?
Oh, and protip, you’ll want the “Developer Pack”, not the first installer.
It is called out that this feature will enable better support in a future VS release.
Hmm, the installer insists: “.NET Framework 4.6.2 or a later update is already installed on this computer.”. This can’t be, right? I checked the list of installed programs and 4.6.1 seems to be the latest update I have installed. Happens with both the web and offline installer.
Are you on Windows 10? 4.6.2 is part of the Windows 10 Anniversary Update already.
That explains it. Thanks!
One important note: .NET is a system component on Windows 10 and 4.6.2 is part of the Windows 10 Anniversary Update (released today as well). You still need to install the Developer Pack on Windows 10 to get the targeting pack installed so you can select the new Framework version in your project properties.
How many does it support?
How many languages does it support?
It supports 24 languages. You can see a full list here: https://msdn.microsoft.com/en-us/library/ee942965(v=vs.110).aspx#supported_languages. Please note that ENU is not on the table but is supported.
I’m particularly delighted by the improvements to NullReferenceException. Will the added information be exposed via the exception or in another way such that it will be possible to add it to logs?
@simon
We’ve only been complaining about the NRE user experience for what… 17 years?
Baby steps 😉
Many windows 7 computers still run with .net 4.5.2 any time frame for automatic windows updates for .net?
With the new DataAnnotation Localization support, how do you do disambiguation? For example, how do you support an application that has the English word “File” appearing in one context as a noun and in another context as a verb? Not all languages have the exact same language rules as English.
The new error message localization feature leverages provider pattern to enable developer to put the localized the message into different data store, e.g. database, xml file, resource file etc. It doesn’t process the localization message. The developer needs to provide the localized message.
what level of .net standard does this release support? 4.6.1 was netstandard1.4 – are we now on 1.5 or higher?
4.6.2 aligns with .NET Standard 1.5. You can view more information on .NET standards here: https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md
Can you please add a per-monitor DPI awareness sample for WinForms? We also need to maintain such projects and would like to update them. Nobody used 8.1, so with Win10 more users may want to have it.
Also, does ETW (“Microsoft-Windows-DotNETRuntime” provider with Exception keyword) show more details with .net 4.6.2?
I’ve captured a trace and the error Messages for exceptions in the ETL are still not very helpful (don’t show which variable and which line in code) 🙁
The example of “signing XML with SHA-256” and “new fields” is missing.
Very happy to see that MS still has a little bit attention for WPF
Great! Does it already work on azure web app?
Can I install 4.6.2 on Windows 1511 (TH2) as we are planning to upgrade to Redstone 1 at a later date?
For use with VS2015 I should use .NET Framework 4.6.2 Developer Pack? Ist this correct?
Yes, to both of your questions. 🙂
someone can provide some code example for the “Soft Keyboard”?
very good question, it seems not working …
There should be no need for any custom code to show the keyboard. You need Windows 10 Anniversay Edition and you need to have the OS in Tablet Mode or have the option to show the keyboard when not in tablet mode turned on. With those conditions met, WPF will automatically show the keyboard when a control is focused via touch or stylus.
I have another question. Is any way to disable automatic showing system touch keyboard in WPF (for instance in case I want have own keyboard independent of various versions of Windows) ?
these two ways I have found don’t work on WPF on win 10 Anniversary:
http://stackoverflow.com/questions/37596526/wpf-on-windows-7-with-touch-hide-soft-keyboard-and-the-popup-icon-that-enables
https://blogs.msdn.microsoft.com/winuiautomation/2015/04/26/how-and-why-i-added-an-on-screen-keyboard-to-my-windows-store-app/ (it works with universal apps, but not in WPF)
I have noticed that TextBox with IsReadOnly=”True” on universal app doesn’t show touch keyboard, but on WPF app does! Why WPF behaviour is different than in universal app?
In WPF on Windows 10 Anniversary Update (and 7) I have turned off touch keyboard overriding automation peer in TextBox:
protected override AutomationPeer OnCreateAutomationPeer()
{
return new FrameworkElementAutomationPeer(this);
}
On Windows 7 works setting InputMethod.IsInputMethodEnabled=”False”
Great!
I am excited with the group sorting in wpf and 260 char limitation( even though most of the OS doesn’t support that).
@WPF Team: On October 29, you promised that you fix the bugs in the Ribbon control and RibbonWindow in the blog post “WPF in .NET 4.6.1”: https://blogs.msdn.microsoft.com/wpf/2015/10/29/wpf-in-net-4-6-1/. You wrote: “We are also actively considering fixing the Ribbon bugs that have been filed in Connect.” Update the System.Windows.Controls.Ribbon: visualstudio.uservoice.com/…/9671640-update-the-system-windows-controls-ribbon. Are these corrections now in the new .NET Framework 4.6.2?
https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/9671640-update-the-system-windows-controls-ribbon
I was confused about the long path context switch. I think you meant to say opt-out: “You can opt applications”
Never mind, I was confused because example set false. But it’s opting not to use legacy support. I understand now. Kind of a double negative boolean.
It is a little awkward when you want to pull in behavior a newer TFM (Target Framework Moniker). The convention is that flags are to opt into legacy/compatible behavior when true and they’ll default to true if you don’t target the TFM where the feature was introduced. You always get the “latest & greatest” behavior when targeting the latest unless you explicitly opt out.
For this particular feature opting without moving your TFM forward is more common than usual I think. Apps will likely work just fine if the feature isn’t there- so deciding not to require 4.6.2 but light up if present (e.g. the switches) is probably a choice many will make.
Note that there are actually *two* switches involved for full support- one for the normalization changes and one for the MaxPath check. I go into more detail in my blog:
“Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false”
MAX_PATH… MS never study lessons! OK, MS DOS had ugly 8.3 names because of memory. WHAT the hellish “limit” you had when designed NTFS for 4 GIGABYTES PC?! Nothing except narrow vision of your pathetic architects. Who cares NOW you remove that limit? Billions of PC run Win7 and they cannot use your “relaxing rules”. Because that stuff had to be done 15 years ago!
Hang tight for another 15. You will be good.
Per-Monitor DPI support for WPF does not seem working on Windows 8.1 as the preview version does not. So, Windows 8.1 will not be supported whereas it has Per-Monitor DPI functionality? If so, a developer has to check OS version at run time and turn on/off its own Per-Monitor DPI feature which uses native code.
Hi emoacht,
we have updated the wpf samples with a new manifest setting which basically makes a WPF app run as Per monitor DPI aware on version of Windows >= Windows 10 Anniversary Update, and as System DPI aware on all previous versions of Windows. Check it out at https://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI and use the email mentioned in the Developer guide to send any questions that you may have to the team.
So System.IO will work for device symbolic links and named pipes?
Then no needs to use CreateFile?
All paths to files should work (e.g. anything that works directly with CreateFile should work). This with the caveat that you have to be in full trust if you want to use \\?\ as opposed to \\.\.
For pipes you need to go through System.IO.Pipes as FileStream has a specific check for handle type. https://msdn.microsoft.com/en-us/library/system.io.pipes(v=vs.110).aspx
There is currently no alternative for mailslots unfortunately as the logic for determining sync/async in FileStream doesn’t work with mailslot handles (so you can’t even pass a handle you open yourself).
I’m entertaining allowing all file handle types in FileStream to allow for corner cases such as mailslots. (Specifically because I want to allow not using CreateFile directly without depending on custom .NET classes for things like mailslots.) You can add your comments to my CoreFx PR at https://github.com/dotnet/corefx/pull/8664 if you wish.
Sadly it throws a NotSupportedException which indicates that I should use CreateFile and attach it to a FileStream instead.
Sorry, my original reply is awaiting approval:
All paths to files should work (e.g. anything that works directly with CreateFile should work). This with the caveat that you have to be in full trust if you want to use \\?\ as opposed to \\.\.
For pipes you need to go through System.IO.Pipes as FileStream has a specific check for handle type. https://msdn.microsoft.com/en-us/library/system.io.pipes(v=vs.110).aspx
There is currently no alternative for mailslots unfortunately as the logic for determining sync/async in FileStream doesn’t work with mailslot handles (so you can’t even pass a handle you open yourself).
Awesome Post. Good approach to give inspirational messages for blogging lovers. Keep it up.
I have it installed, but can’t target a project to it
Make sure you installed the developer pack and that you restart VS after installing it.
This doesn’t make any difference. I have installed the dev pack and uninstalled it and re-installed it but it does not show up inside VS. Also I cannot find any trace of 4.6.2 in C:\Windows\Net.Framework dlls.
Any chance of adding a spell checker for my WebForms and WinForms?
Where is the mentioned “Support for Persisted-Key Symmetric Encryption” example?
I really looking forward to the long file path support.
Installed the new .Net 4.6.2 and 4.5.2, but can’t use them in a C# Portable Library. Is this intentional? The .Net 4.6.2 shows as an option in my C# console apps but is absent in Portable Library projects.
You need to target .NETStandard1.5 to get 4.6.2 surface area.
https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md#mapping-the-net-platform-standard-to-platforms
what is the Difference between .NET 4.6.2 and .NET Core 1.0?
I am really confused!
.NET Framework 4.6.2 runs on Windows only. .NET Core 1.0 runs on Windows, Linux, and Mac.
Hi, I installed Windows 10 Aniversary update before Framework 4.6.2 and now the installer tells me that the framework is already installed and in the registry it is registered, but it is NOT showing up in Visual Studios taget Framework List and also not in the Systemsettings – Programms and Features list??? Any help would be great!
You need to install the 4.6.2 Developer Pack. See the Download Now section at the top of this page.
Installing the developer pack does not help. I installed the developer pack and the framework does not show up in VS. I repaired, I re-installed. Nothing I am able to do, aside from install a new copy of Visual studio, will make it appear inside VS.
WPF .NET 4.6.2 Windows 10 Soft Keyboard support not working ?
Hi, I’m using WPF on .NET 4.6.2 on Windows 10 Pro 1511 (10586.494) and I don’t see any improvements with touch keyboard when TextBox get focus. Keyboard still doesn’t automatically show on got focus and disappear on lost like with UWP apps.
I reinstall .NET 4.6.2 and developer target pack on my machine but nothing changes. I have targetted new WPF application on 4.6.2 using Visual Studio 2015 Update 3.
1. Anyone has “Soft Keyboard Support” working on WPF app on Windows 10 (every version or I have to upgrade to Anniversary?)? Have I do something to get this feature working?
2. “Soft Keyboard Support” works only on Windows 10? What about Windows 8.x and 7?
I have updated my Windows 10 to Anniversary Update (1607) and Soft Keyboard in WPF 4.6.2 has started working !!!! What’s more I have checked that you don’t have to target WPF app to 4.6.2.
But I have noticed that desktop app is not moved when keyboard cover input! Older Windows versions have worked better.
@RaceRalph: Thanks. Works! (Well – The ones able to read do have an advantage sometimes… 😉 The next time I will read the Comments after the Download Links…)
Is renaming of directories fixed (if they differ only in lower upper case)?
I get :
“An unhandled exception of type ‘System.IO.IOException’ occurred in mscorlib.dll”
if I run:
static void testDirLowerToUpper()
{
//File.Move(@”d:\tmp\upper\test.txt”, @”d:\tmp\upper\Test.txt”);
string dirNameLower = @”d:\dir-lower-upper-test”;
string dirNameUpper = @”d:\DIR-LOWER-UPPER-TEST”;
if (!Directory.Exists(dirNameLower))
{
Directory.CreateDirectory(dirNameLower);
}
Directory.Move(dirNameLower, dirNameUpper); // here crash
}
————-
Let me suppose: NO ???
Its incredible that such a bug is still here (In this case you need to rename the dir
first to “d:\dir-lower-upper-test.whatever-you-want” and then to continue….
In C++ it works, in python it works, in java it works, in commandline it works,
in PowerShell it crashes 🙂 … thanks to .NET.
Can you tell me if it will be fixed one day
I was unaware there was an ask for this. New work starts in CoreFx on GitHub first- if you could open an issue there it would be great. You can assign it to me. If you don’t want to or can’t let me know and I’ll open the issue- but it would be better if you did for tracking/visibility.
https://github.com/dotnet/corefx/issues
“Support .NET in packaged desktop apps” – could you add more details and elaborate on this?
This .NET framework update breaks numerous running WPF applications due to the removal of the MemoryPressure framework class, often used to work around a serious WPF design flaw (which, gratefully, was itself fixed in 4.6.2). If the developer didn’t check for null when referencing the class (and why would they, for a static object that is part of the framework?) their app crashes.
Which means, of course, that upgrading to Windows Anniversary Edition with 4.6.2 immediately kills our applications.
Anyone want to explain why my prior comment on this from yesterday morning has not shown up yet? Censorship? This is a serious, serious issue, and not the first time the in-place upgrades to .NET have caused us grief.
Ah, probably not censorship, sorry. I had a link in my post yesterday, probably got eaten by the spam filter.
Thanks for reporting this issue to us. We are investigating and will update this thread when we have more to share.
I don’t know if this is the cause, but after upgrading to 4.6.2 just a couple days ago, Outlook 2016, TFS Power Tools, and Windows Explorer are now all crashing. Outlook 2016 can’t be opened at all, and the other 2 have random crashes. I have reported this on Connect:
Faulting application name: OUTLOOK.EXE, version: 16.0.7167.2040, time stamp: 0x57ad46c1
Faulting module name: Windows.UI.Xaml.dll, version: 10.0.14393.82, time stamp: 0x57a55b79
Exception code: 0xc000027b
Fault offset: 0x00000000006d68ab
Faulting process id: 0x3aa0
Faulting application start time: 0x01d206eca4423aad
Faulting application path: C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE
Faulting module path: C:\Windows\System32\Windows.UI.Xaml.dll
Report Id: 25f91b45-b75a-457e-bfbd-be62c99d5697
Faulting package full name:
Faulting package-relative application ID:
Faulting application name: TfsComProviderSvr.exe, version: 14.0.23206.0, time stamp: 0x55d781f3
Faulting module name: ntdll.dll, version: 10.0.14393.103, time stamp: 0x57b7e09e
Exception code: 0xc0000374
Fault offset: 0x000d9841
Faulting process id: 0x413c
Faulting application start time: 0x01d206ea14c927cd
Faulting application path: C:\Program Files (x86)\Microsoft Team Foundation Server 2015 Power Tools\TfsComProviderSvr.exe
Faulting module path: C:\WINDOWS\SYSTEM32\ntdll.dll
Report Id: a4f5a4ff-4b76-471d-81a9-7600ebf87a49
Faulting package full name:
Faulting package-relative application ID:
Faulting application name: explorer.exe, version: 10.0.14393.0, time stamp: 0x57899981
Faulting module name: combase.dll, version: 10.0.14393.103, time stamp: 0x57b7e317
Exception code: 0xc0000005
Fault offset: 0x000000000007788d
Faulting process id: 0x4280
Faulting application start time: 0x01d206ea157b2db5
Faulting application path: C:\WINDOWS\explorer.exe
Faulting module path: C:\WINDOWS\System32\combase.dll
Report Id: 4572cb07-6629-4137-a850-c427f258d889
Faulting package full name:
Faulting package-relative application ID:
Faulting application name: Explorer.EXE, version: 10.0.14393.0, time stamp: 0x57899981
Faulting module name: ntdll.dll, version: 10.0.14393.103, time stamp: 0x57b7e207
Exception code: 0xc0000374
Fault offset: 0x00000000000f73f3
Faulting process id: 0x1e4c
Faulting application start time: 0x01d206e78d725ffb
Faulting application path: C:\WINDOWS\Explorer.EXE
Faulting module path: C:\WINDOWS\SYSTEM32\ntdll.dll
Report Id: 8b9bffd9-fedc-4a77-83ad-ee54614913ab
Faulting package full name:
Faulting package-relative application ID:
I get the exception when trying to create long path folder:
string longDir = @”…”; //485 characters
Directory.CreateDirectory(longDir);
Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path
Windows 10 x64 Home Version 1607 Build 14393.10, VS 15 Preview 3
You’d need to give me more details on the exact path you’re trying to create. Please respond on my blog where you also asked this question.
Will I be able to access the added information of NullReferenceException programmatically? It will be useful when debugging in a environment that I can’t use a debugger and can only see the outputted trace information.(e.g. A website server that provided by AppHarbor.)
Nice ! Thanks for sharing it
I just installed 4.6.2. However, in the VS community Edition, when I click on File – New Web site, I cannot select it in the Framework list, it is not available
You have to install the developer pack (which has the targeting pack for the build/VS) and you need to restart VS.
I installed the developer pack and restarted VS; I even re-booted. 4.6.2 is still not available in Visual Studio.
To my opinio, here in the release notes is a very wrong Statement on the “consumer” Situation with the length of file paths: “This limitation doesn’t usually affect consumer applications (for example, loading files out of “My Documents”),”.
This is easy to say, but users even do not notice when they exceed this lenght, they even do not know about this Limitation at all (because it is ridiculous and something of the DOS – 1980ies), and they definitely do exceed the path lenght – and loose data. This Limitation also exists on Windows Servers, and in my Company much data was lost because of exceeding the Limitation by users. Even IT departments sometimes are not aware. Why was this very fundamental and serious Limitation not addressed with e.g. Windows 2000 or earlier? Thanks to Jeremy Kuhne for saying that the summer update of Windows 10 now resolves this.
It would have been better to say that it hits developer scenarios much more frequently than consumer at this point in time. We are aware, however, that the typical end user will hit this more often as they continue to accumulate files (notably pictures). We absolutely want to see the issue resolved for everyone in the entire ecosystem- there is a lot more work still to be done to make this happen.
There were a variety of mitigations that have been done over the years for long paths, but they do only go so far. As 10-15 years ago the need was not as pressing it was harder to argue for the investment needed beyond mitigations. Another part of the reason that things weren’t handled earlier was due to higher complexity of solving it when we had much older OS versions (and lower end hardware) in the support matrix.
A lot of things changed over the past few years to help push this issue over the edge. I discussed some of what went into that in a recent .NET Rocks! podcast if you’re interested in hearing more on the topic.
¿Is there a reason why Windows 8 has been discarded from the Supported Operating System list of .NET 4.6.2? I have installed the update successfully in a Windows 8 Enterprise 64bits.
Support for Windows 8 has ended on January 12, 2016. This means e.g. no more security updates are released for Windows 8. See this FAQ: https://support.microsoft.com/en-us/gp/lifecycle-windows81-faq
I guess this is the reason that Windows 8 is not included in the Supported Opreating System. If you’re still running Windows 8, you should upgrade to Windows 8.1.
WPF & scrolling focused input control not to be covered by soft keyboard – any (official/ unofficial) samples?
from .NET 4.6.2 Preview announcing post comment:
Mario Vernari
A bunch of good news!
Just a question about the Soft Keyboard support for WPF. The problem wasn’t just the opening/closing of the keyboard, but sometimes the textbox was covered by the overlapping keyboard. Does the new feature shift the viewport according to the actual useful area?
Thanks.
4 months ago
Reply
Stacey Haffner [MSFT]
Thanks for review and feedback. The Soft Keyboard feature will not add the functionality of shifting viewport at the framework level. We think apps are best place to handle this, more guidance/samples on how to achieve the desired scenario(s) at an individual app level will be shared in coming months.
There are some oficial samples for scrolling view to not be covered by soft keyboard for Windows Store/UWP apps with InputPane class f.e https://code.msdn.microsoft.com/windowsapps/keyboard-events-sample-866ba41c/ or https://msdn.microsoft.com/en-us/windows/uwp/input-and-devices/respond-to-the-presence-of-the-touch-keyboard (and standard TextBox in UWP has this feature), but I haven’t found any with WPF.
http://stackoverflow.com/questions/24517936/soft-keyboard-overlaping-control-wpf-desktop. Is it good enough solution? But it requires synchronize to moment when keyboard open.
I just pushed a sample to GitHub here: https://github.com/Microsoft/WPF-Samples/tree/master/Input%20and%20Commands/TouchKeyboard
You can use the code there to both register for notifications concerning the touch keyboard and also there is a decorator that can be used to respond to touch keyboard occlusion by doing basic shifts. More complex work can be done on a per application basis using those as a starting point.
Great! Thank you very much, it is what I need.
Reading readme file I was noticed: “In .NET 4.6.2 or above on Windows 10 Anniversary Update or above, WPF supports automatic display of the Windows touch keyboard (tiptsf).” Word “or” between 4.6.2 and Windows 10 Anniversary Update suggests that the new feature also could work without Windows 10 Anniversary Update or even Windows 10 (Windows 8.x?, Windows 7 has quite different touch processing which seems working for everytime).
From my practical experience I could say that touch keyboard in WPF started working after I updated my Windows 10 to Anniversary Update. BTW reading .NET 4.6.2 changes document it seems the new feature works on all versions of Windows 10.
One more test: on Windows 8.1 no changes with software keyboard on WPF 4.6.2 like on Windows 10 before Anniversary Update.
What’s more last TouchKeyboard seems working only on Windows 10 (on Windows 8.1 I got PlutformNotSuportedException for ‘Windows.UI.ViewManagement.InputPane, Windows, ContentType=WindowsRuntime’, but WinRT InputPane class exists also on Windows 8.x https://msdn.microsoft.com/pl-pl/library/windows/apps/br242255)
The key changes present in Windows 10 Anniversary Edition are not present in any other Windows version. If you look at the code that instantiates the InputPane, IInputPaneInterop is a new public COM interface that we use in order to feed IInputPane an HWND, where before it only worked with ICoreWindow. This opens the InputPane to all Win32 applications (not just WPF). There are other changes as well internal to the Touch Keyboard focus tracking algorithm that are necessary to support WPF again due to the way the native portion of the WPF touch stack handles WM_POINTER messages. As such, the requirement is Windows 10 Anniversary Edition.
Note that the focus tracking changes were initially debuted in Windows 8, which is when WPF touch keyboard support stopped working. The Windows 7 stack is wholly different, as you say, and has historically worked fine.
I have another question. Has Microsoft WPF team thought about supporting more complicated layouts than StackPanel? If I use StackPanel moving UI works great, but if I try use for instance:
1
2
3
4
5
6
7
8
9
10
11
12
13
then with touch keyboard visible textbox-es 1-12 are moved up well, but textbox 13 isn’t moved.
Generally with using Grid and one Row with height * and second row with Auto elements in second row are not moved.
What’s the best proposition to solve this problem?
I’m running into a conflict between System.Globalization and the new System.Web.Globalization namespace introduced in this version, that only appears at runtime. Details at http://stackoverflow.com/questions/38828248/system-web-globalization-namespace-introduced-with-net-4-6-2-conflicts-at-runti
Can you take a look?
Both the Web Installer and off line installer report: “.NET Framework 4.6.2 or a later update is already installed on this computer”
clrver says 4.0.3019 is there
help about says 4.6.01586 is installed
programs and features says 4.6 and 4.6.1 are there
Is there a log somewhere I can look at to see what 4.6.2 is complaining about ?
Or is it actually installed and hiding.
It’s automatically installed when you install the Windows 10 Anniversary Update, but it seems to be hiding indeed.
My PC says I have
Windows 10 Pro
Version 1607
OS Build 14393.10
I see no reference to “Windows 10 Anniversary Update”
The registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\ Release says 394802
Interesting ?
See https://en.wikipedia.org/wiki/Windows_10_version_history
> Windows 10 Anniversary Update, or Windows 10 Version 1607, codenamed “Redstone 1”,[181][182][183][184] is the second major update to Windows 10 and the first of the 3 major updates planned under the Redstone codenames.
What is the plan to add HTTPS (secure HTTP) support to MediaElement and MediaPlayer classes? With all big tech companies (including MS) pushing site owners to move to HTTPS, this is a glaring hole in those classes.
Why can’t you use 4.6.2 with Visual Studio 2015? I installed the developer pack with nothing else running and then brought up Visual Studio and I cannot set any projects to use 4.6.2. Why not? When will this be addressed?
This documentation on the NullReference is rather vague…
“In this release, we extended the CLR debugging APIs to enable the debugger to request more information and perform additional analysis when a NullReferenceException occurs. Using this information, a debugger will be able to determine which reference is null and provide this information to you, making your job easier.”
But yet provides no example/description or screenshot.
I’ve tried it and don’t see any additional information in terms of letting me know which reference is null
Has anyone else tried it?
Andrew,
First you are going to need to have both VS15 and .NET 4.6.2 installed.
Try running following code.
Finder find = new Finder();
int File = find.findLibrary().findBook().findContainer().GetValue(10);
public class Finder
{
public Finder()
{
}
public Library findLibrary()
{
return new Library();
}
}
public class Library
{
public Library()
{
}
public Container findBook()
{
return new Container();
}
}
public class Container
{
public Container()
{
}
public Container findContainer()
{
return null;
}
public int GetValue(int n)
{
return n;
}
}
When 4.6.2 will be available by WSUS ?
I second this question, this is really important to getting this release out.
Third this. We need this to happen.
Forth this!
Are my eyes deceiving me or is 4.6.2 still not available via WSUS?
What’s the delay?
.NET 4.6.2 breaks System Center Virtual Machine Manager 2012 R2 console (Update Rollup 10). Right-click on any virtual machine, go to Properties, and 5-10 seconds later, an error stating that VMM has encountered a problem and needs to close.
Always NullReferanceException is troublemaker. that improvement has been good.
“WCF now has the ability to include OperationContext.Current with ExecutionContext so that the OperationContext flows through asynchronous continuations.”
While you were at it, you should have also set TransactionScopeAsyncFlowOption.Enabled on transaction scope that is created when OperationBehaviorAttribute.TransactionScopeRequired is true.
Without this, transactions do not flow through asynchronous continuations.
.NET 4.6.2 on Windows Server 2008 R2 breaks SignedXml.CheckSignature. On newer versions it seems fine.
Code that throws this exception is trivial (copied from MSDN sample), and it works after I uninstalled .NET 4.6.2 and re-installed 4.6.1:
Type: System.Security.Cryptography.CryptographicException
Message: Object was not found.
at System.Security.Cryptography.NCryptNative.CreatePersistedKey(SafeNCryptProviderHandle provider, String algorithm, String name, CngKeyCreationOptions options)
at System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm, String keyName, CngKeyCreationParameters creationParameters)
at System.Security.Cryptography.RSACng.get_Key()
at System.Security.Cryptography.RSACng.Encrypt(Byte[] data, RSAEncryptionPadding padding)
at System.Security.Cryptography.RSAPKCS1KeyExchangeFormatter.CreateKeyExchange(Byte[] rgbData)
at System.Security.Cryptography.CngLightup.DetectRsaCngSupport()
at System.Lazy`1.CreateValue()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Lazy`1.get_Value()
at System.Security.Cryptography.CngLightup.GetRSAPublicKey(X509Certificate2 cert)
at System.Security.Cryptography.X509Certificates.X509CertificateExtensions.GetAnyPublicKey(X509Certificate2 c)
at System.Security.Cryptography.Xml.SignedXml.CheckSignature(X509Certificate2 certificate, Boolean verifySignatureOnly)
at .ValidateSignedXmlMessage.ValidateXmlMessage(String xmlString) in
at
I’ll write repro and post it to MS Connect.
Thanks! I’ve passed this information along to the right folks on the team.
Have you changed something else with regards to WCF that is not in the release notes?
We have a serious problem with it, after installing the new version or updating to Windows 10 Anniversary update.
https://connect.microsoft.com/VisualStudio/feedback/details/3077713/after-windows-10-anniversary-update-wcf-pipe-channel-stops-working-after-the-cross-calls-of-asynchronous-operations-between-two-processes
Any ideas what might be wrong? This code worked just fine, up until the update.
All the supportedRuntime config elements are incorrect according to the documentation.
https://msdn.microsoft.com/en-us/library/w4atty68(v=vs.110).aspx
They should be in the form
The correct 4.6.2 supportedRuntime config element is not .
the link to download the framework (developer) is broken
https://www.microsoft.com/en-us/download/details.aspx?id=53321
language english doesn’t work. Didn’t try the other languages