Understanding Different Kinds of Versioning

In the .Net framework there are a number of notions of versioning that we worry about for a release. Some of the traditional notions of versioning are backwards compatibility (the ability for your old programs and data to continue working in the same way on newer versions) and forwards compatibility (the ability for your old programs to handle features and data from newer versions).

There are also some other notions of versioning, including some new notions of versioning that we’ve been focusing on for .Net 4.

Side by side is the ability to install and run two different versions at the same time. The .Net framework has previously supported side by side within a machine. It was possible to install and use .Net 1 applications at the same time as .Net 2 applications. In .Net 4 I’ve mentioned in the past additional support for side by side within a process. There were some surprising complications here for WCF, where you might think decoupled services makes side by side execution simple, because we handle a lot of data serialization that subtly, or sometimes not subtly, differs between versions.

Multitargeting is the ability to use the most recent version to build applications for either newer versions or older versions. Visual Studio 2008 had limited support for multitargeting and this is much improved in Visual Studio 2010 (this again turned out to be more work than you might expect for a relatively tool-light framework). Scott Guthrie has a recent article on Visual Studio 2010 multitargeting that you might find interesting if you want to see plenty of examples.