Will .net 2.0 and 3.5 run side by side?

2.0 will play nicely with 3.5. .NET 3.5 is really just some extra classes added on top on 2.0, so everything is compatible. I moved a bunch of projects from 2.0 to 3.5, and everything migrated very smoothly, with just a recompile.


.Net 3.5 is, essentially a set of additional assemblies that run side-by-side with the 2.0 libraries. Not a single breaking change occurred to any of the existing 2.0 libraries. You can directly convert all of your 2.0 applications to 3.5 without a single problem. This includes running 2.0 applications on the 3.5 framework. Some optimizations and bug fixes were made to 2.0, but all public interfaces remain unchanged. This applies to all namespace including System.Web.

There were a lot of new features added in 3.0 and 3.5 versions of the framework such as WPF, entity framework, and several other "frameworks". Classes were added to existing namespaces but, they actually live in separate dll's.

One thing to note as FryGuy points out:

Be careful about installing 3.5 SP1, because it also installs 2.0 SP2, which adds some extra functions. This would be fine, except for visual studio will use IntelliSense and everything will compile fine and work great on the developer machine, but completely fail with an obscure error on computers with "just" 2.0.

An example of this is the method ManualResetEvent.WaitOne. SP1 added the overload WaitOne(int), whereas without it, you need to call WaitOne(int, false).

As CMS posted from 4GuysFromRolla:

Additive versions of the .NET Frameworks
(source: 4guysfromrolla.com)


Yes, but with a caveat.

Be careful about installing 3.5 SP1, because it also installs 2.0 SP2, which adds some extra functions. This would be fine, except for visual studio will use IntelliSense and everything will compile fine and work great on the developer machine, but completely fail with an obscure error on computers with "just" 2.0.

An example of this is the method ManualResetEvent.WaitOne. SP1 added the overload WaitOne(int), whereas without it, you need to call WaitOne(int, false).