Programmatically specify which version of .NET to load
See the question and my original answer on StackOverflowYou will have to write your own CLR host, instead of relying on the IJW "it just works" .NET feature.
If .NET 4 is installed on the machine, this link describes how to do it: Loading the Common Language Runtime into a Process. With .NET 4, you can even load multiple versions of the CLR side by side in the same process (with restrictions though).
Additional information: Use CLR4 Hosting API to invoke .NET assembly from native C++