.NET Framework Evolution Map
Since the release of .NET Framework 3.0 and 3.5 I have noticed that not only users but also IT people, even developers get confused about how and what to install on a new system. I mean they think that .NET Framework 3.0 and 3.5 are decoupled from .NET Framework 2.0 and they download the installers for Framework 2.0, 3.0 and 3.5 without realizing that they are reinstalling the same components and wasting time, particularly on enterprise scenarios. Take a look at the following table:
The header row is labeled with the .NET Framework releases and the first column is labeled with the 3 main components or axis of a .NET Framework release. The table will help you analyze the evolution of these components across the many .NET Framework releases.
Essentially you will be able to identify 2 kinds of releases: Evolutionary and Additive.
- Evolutionary: The 3 major components of the .NET Framework have evolved. The CLR has improved its garbage collection algorithms, has added new MSIL instructions sets, has improved interoperability with legacy/COM, etc. New classes and hierarchies have been added to the Framework Class Library. New language features have been incorporated into the flagship languages of the Framework.
- Additive: One of the 3 major components of the .NET Framework has remained constant (highlighted on the table), hence creating a dependency and coupling of the actual release with the previous release. Which mean that in order to install release "n", you must have installed release "n-1". Fortunately for us, Microsoft has packaged the installers in a way that they install all the required components whether they were already present or not.
So with this basic theory you can realize that in .NET Framework 3.0 the star of the show was the Framework Class Library, and in fact it was because it added WPF, WCF, WF and Cardspace. As regards .NET Framework 3.5 several classes have been added to support Lambda Expressions and improvements on WCF, WF and WPF mainly, also the languages have been enhanced to support LINQ, intializers, extension methods and anonymous types. However what remain constant is the CLR, which mean that in the case of the new language features there is no direct support through new MSIL instructions. Thus the compiler is the responsible for making the "magic" of translating the new language features into the existing MSIL instruction set of CLR 2.0. That is why some people call LINQ as syntactic sugar, because it sweetens the query syntax but under the hood nothing changes.
The 4th .NET Framework release is an Evolutionary release, the CLR and the languages have embraced a strong support for dynamic types and the DLR. The Framework Class Library supports generic variance and improved versions of the existing managed APIs as well as new ones such as MEF.