VS 2008 was the first release of Visual Studio that included
multi-targeting support for .NET. What this meant was that you could use
VS 2008 to create and edit not only .NET 3.5 projects, but also .NET 3.0 and
.NET 2.0 projects as well. This allowed developers to more quickly
upgrade and take advantage of new Visual Studio tooling features – without
having to necessarily require the newer version of .NET to be installed on the
clients and production servers running their applications.
VS 2008’s multi-targeting support was able to take advantage
of the fact that .NET 2.0, .NET 3.0, and .NET 3.5 all ran on top of the same
version of the CLR – and that the primary difference between the .NET versions
was in their framework libraries. As a result, Visual Studio’s compilers
were able to generate the same IL output, the debugger was able to debug
against the same CLR engine, and the IDE support for multi-targeting was
primary focused on filtering out new assemblies and project templates from
showing up when they weren’t supported with a given .NET version.
This multi-targeting experience worked – although it wasn’t
perfect. Intellisense within VS 2008 always shows the types and members
for the .NET 3.5 version of a framework library (even if you are targeting .NET
2.0). This means that you can sometimes inadvertently end up using a
method that is only in ASP.NET 3.5 even when you are working on a ASP.NET 2.0
project.