A first hand look from the .NET engineering teams
Fundamentals were a big part of our focus while building .NET 4.5. We divided fundamentals into seven areas called “tenets”. One of these tenets is compatibility. Today’s post is by Manish Agnihotri, a program manager who is driving compatibility across the .NET Framework. -- Brandon Editor's update: we've added more discussion about the compatibility of .NET Framework 4.5 in a recent post on October 17, 2012.
Fundamentals were a big part of our focus while building .NET 4.5. We divided fundamentals into seven areas called “tenets”. One of these tenets is compatibility. Today’s post is by Manish Agnihotri, a program manager who is driving compatibility across the .NET Framework. -- Brandon
Editor's update: we've added more discussion about the compatibility of .NET Framework 4.5 in a recent post on October 17, 2012.
.NET Framework 4.5 is an in-place update that replaces .NET Framework 4 (rather than a side-by-side installation). Our goal is for .NET 4.5 to be fully backward compatible with applications built for .NET 4 (.NET 3.5 and .NET 4.5 will be side-by-side). We’ll talk about the compatibility story for .NET 3.5 in a later post. One of the first things you’ll notice about .NET 4.5 is the version number (4.0.30319) is the same as .NET 4; this is the practice used by other in-place updates.
Our primary concern is guaranteeing applications you use do not break after you install .NET 4.5. We accomplish this by running hundreds of application in our compatibility lab to find issues as soon as they’re introduced. While designing new features or changing existing code, we keep compatibility in mind. And a small group of us, the Developer Division Compatibility Council (DDCC), monitor changes made by developers. We review potential breaking changes, and help teams understand and assess the compatibility impact of new features and bug fixes. For .NET 4.5, members of DDCC reviewed every proposed breaking change, every new feature, and a majority of the bug fixes for the release.
We’ve put a lot of effort into maintaining a consistently high bar for compatibility across the product, yet we know some issues may get past us. Many applications will exercise the .NET Framework in ways that we did not expect or we lack test coverage for. Still we care about knowing every issue, even those that may seem like corner cases. Once you install .NET 4.5 Developer Preview on a machine that previously had .NET 4, any compatibility issues can be sent to the Connect feedback site.
There are three kinds of version compatibility testing we do: (1) binary compatibility, (2) source compatibility, and (3) serialization compatibility. You may also find these approaches useful in your testing, and should an issue arise this may help you narrow down the root cause. Having a wide range of scenarios within each kind of tests is also critical to ensuring good compatibility coverage.
Binary compatibility uses binaries built targeting .NET 4 and then are run on .NET 4.5. Essentially, we’re testing that the behavior of newer .NET libraries is equivalent to previous versions. This can range from making sure the return value of a function is the same or that the same exceptions are raised. The hardest issues are multi-threading behaviors – sometimes performance improvements can be a breaking change.
Source compatibility takes an application that builds and runs successfully against .NET 4 then does the same with .NET 4.5. An interesting case is a machine where Visual Studio 2010 runs on a machine with .NET 4.5 installed – since reference assemblies are used for targeting versions of the framework, building an app in VS2010 and then running it is actually binary compatibility testing. To do source compatibility testing, we build against the .NET 4.5 targeting pack (which is part of the Visual Studio 11 Developer Preview).
Serialization compatibility deals with data and has several permutations. First, we let an app running on .NET 4 serialize data (e.g. save to disk) and then an app running on .NET 4.5 de-serializes (e.g. read from disk). Second, we do this in reverse by serializing from .NET 4.5 apps and de-serialize in .NET 4 apps. Third, we take a web service running on .NET 4.5 reading serialized data created by a .NET 4 based client. Fourth and last, we do the inverse with a .NET 4 web service and a .NET 4.5 client. A serialization problem will often show up as corrupted data or some kind of serialization exception.
Compatibility is an important part of migrating apps forward, though in rare cases it is necessary for a framework library to make breaking changes. We try to avoid this, using it as a last resort. MSDN documents the known breaking changes in .NET 4.5. We also have a migration guide with advice for testing your app.
If you discover any compatibility issues while working with previews and betas, we want to hear about them via Connect. Hopefully, all our work to make this a highly compatible release makes it easy for you to upgrade to .NET 4.5.
@Simone -- We should be able to repro your scenario here. Thanks for reporting it.
@David -- Could submit more information about the apps that stopped running, via Connect. That would be very helpful for us. connect.microsoft.com/VisualStudio. Sorry to hear about your experience.
I'd have preferred an option to install side-by-side. I want to use 4.5 on my machine, but I can't deploy 4.5 apps to anybody. I'll have to wait until 4.5 is officially released I guess.
I have submitted the bug report to Connect here: connect.microsoft.com/.../multiple-items-selected-in-single-selection-grouped-listbox-after-vs11-net-4-5
Not to join the beat MS over the head parade here, but I have to say that results have proven quite buggy, and the process of getting rid of VS 11 Beta and .Net Framework 4.5 and back to a functional VS 2010 SP1 .Net 4 was a day long, bug ridden pile of misery. I can confrim however, that once I rid myself of .Net 4.5, the mysterious multiple selections in a SIngle Selection WPF grouped Listbox is now gone.
At present, I fear the day that this gets pushed out as a Windows Update because my app will certainly be among thiose that break. There was nothing I could do to get it working properly in 4.5, thus the uninstall.
All I can say is PLEASE take your time and get it right, we're not in any hurry for 4.5.
@Simone Thank you for your feedback. We really need to have more details in order to investigate issue you mention. We're looking at every issue. Can you submit a bug report through Connect? connect.microsoft.com/VisualStudio
@All -- We are investigating each and every issue that is reported to us. It is critically important that we resolve any compatibility issues with the product. As stated before, connect is the best place to log those issues: connect.microsoft.com/VisualStudio.
Can we PLEASE get a post about windows XP support?
We desperately need to know the plan here.
Why the secrecy!? It is killing us. Just say what you plan!
(if the answer is no them I look forward to using .net 4.5 in two years when XP is no longer supported by my company (and Microsoft) and I can upgrade to .net 4.5.)
Why is no one from Microsoft responding to the question posted by rossisdead on January 5th?
From rossisdead: "Who, exactly, is the inplace update system supposed to help?"
Who, indeed. The only thing I can think of is that this in-place upgrade is in preperation for Windows 8 phones and tablets--which won't have 100 GB+ hard drives to store multiple versions of the .NET Framework on.
From rossisdead: "It's not the server admins. Now they can't run one website for 4.5 without forcing every other 4.0 site hosted on the same server to be upgraded to 4.5."
Imagine how this will affect hosting companies. They can't force their customers to run under .NET 4.5. Say hello to a ton of new hardware.
From rossisdead: "It's not the developers. Now if they want to upgrade one website to 4.5, a website that might be using an incompatible 4.0 library that they don't have access to, they have to wait until the third party developer updates and patches the problem."
The point here goes back to the server admin (and hosting company) issue. Heck, what if you're a mom & pop ISV who's hosting sites for various customers, all running .NET 4.0. Time to stand up a .NET 4.5 server and start migrating. You're a small company. Do you have the money, time, and people to do this? Probably not.
If I develop an application using the 4.5 framework--but targeting the 4.0 framework--I cannot ensure that the application will run bug-free on the 4.0 framework. There could be a bug in the 4.0 framework that was fixed in the 4.5 framework. On my 4.5 machine, all is well; on the client's 4.0 machine, the bug emerges. I can't even debug on my machine to locate the problem!
@BillB1234: We've built .NET 4.5 to be a compatible replacement for .NET 4 -- it's very similar to a service pack. That means that if a bug fix were to make an impactful semantic change, we'd consider it a breaking change. We don't want these. In fact, the same promise occurs with the .NET platform updates that exist today. We expect apps built for .NET 4 to work on 4.0.1, 4.0.2, 4.0.3, and 4.5.
I realize you might only be concerned about a theoretical issue, but if you have discovered a specific problem that reflects your scenario we really want to hear about it. Please send mail to firstname.lastname@example.org and we'll follow up with you.
From a corporate standpoint, this is an enormous problem. All existing 4.0 applications would have to be tested against the 4.5 framework to ensure they still work before 4.5 (or Win 8) could be rolled-out. Has Microsoft really thought this through?
Will I be able to develop application in C# 5.0 and .Net Framework 4.5 using Visual Studio 2010
It's not only .Net 4.5, but installing VS2012 will break VS2010 as well. I made the mistake, and cleaning up was real messy. You need to uninstall everything VS related, and reinstall them back again.
It means no VS2012 or .Net 4.5 for me. Sorry, keeping my existing projects running is much more important than curiosity.
@Sukru Can you explain how either VS2012 or .NET 4.5 broke your copy of VS2010? We would like to know the issue so it can be fixed. We've done a lot of testing to ensure that both VS2012 and .NET 4.5 work with VS2010.
Seconding @Noufal Aboobacker: I am having a hard time find exact confirmation. Can you use VS 2010 to develop applications for Framework 4.5? It is sounding like "No", but no confirmation yet. I have a client that could really use the changes to WF in 4.5, but does not have the funds to move forward with a few VS purchase at this time.
I feel the in place upgrade was not a positive decision. I am already finding UI screens from a VS210 .NET 4.0 source code build application not behaving the same. I prefer the side by side install where I am assure that the target .NET install are separate and I do not have to retest all our applications which will cost a bundle for my company. This is not a good move on Microsoft part. Going the wrong direction.