The Pieces of .NET Framework
Unfortunately, a lot of terms and version numbers are floating around in the .NET world right now, and sorting them out can be particularly difficult. Let's take a moment and step through the various pieces of the .NET Framework and how they relate to all the version numbers.
It is easiest to think of the .NET Framework as a family of products including the runtime, the compilers, and the common code libraries.
The runtime is the common language runtime, or CLR. It is the virtual machine that hosts .NET applications. It provides many of the core services such as memory management, garbage collection, and security. It's outside the scope of this book to discuss the CLR in depth, but you should know that the CLR is the .NET runtime and its version numbers differ from those of the .NET Framework in general. The current CLR is 2.0.
The two dominant languages in the .NET world are C# and Visual Basic .NET. Both of these languages have their own version numbers and those numbers differ from the .NET Framework as a whole. The current version of C# is 3.0, and Visual Basic is 9.0.
You'll also hear about the Base Class Library (BCL) and the Framework Class Library (FCL). The BCL is a set of classes available to any language in the .NET family. These classes mostly live in the System namespace. The FCL is a term that includes both the BCL and the common libraries in the Microsoft namespace. Distinguishing between the two sometimes results in hair splitting, and many people use the terms interchangeably.
Figure 1.1 shows how these "products" have changed with each release of the .NET Framework beginning with 2.0.
Figure 1.1 The version history of the .NET Framework.
Some interesting points to clarify are the following:
- The CLR has not changed since the release of 2.0. Thus, the core features of the .NET Framework are the same.
- C# 3.0 and VB .NET 9.0 both compile to bytecode (or IL) that is compiled "just in time" on the CLR 2.0. The new language features with .NET 3.5 are essentially enhancements to the respective compilers.
- WPF is a class library; nothing changed the underlying CLR. This means that unlike .NET 2.0, version 3.0 of the Framework was just the addition of new libraries.