This is pretty obvious I think but I thought it better to ask:
If an application (exe) is compiled to run on .net 3.5 and if the dlls it uses are compiled for .net 1.1 will the DLL automatically use the 2.0 CLR, i.e the parents?
What about vice versa?
If so, what about compatibility issues?
It is the EXE file that decides what .NET runtime version the process will use. Any assemblies compiled for earlier versions of .NET will have to use "process version". This usually works as .NET has had very few breaking changes.
A .NET 3.5 application using a .NET 1.1 DLL will run that DLL on the CLR 2.0 (.NET 2.0, 3.0 and 3.5 all uses the same CLR 2.0 version).
.NET 4 has a new CLR and one of the new features of .NET 4 is in-process side by side CLR hosting that allows multipe versions of.NET in the same process and that may change the answer..