La respuesta anterior es incorrecta. Obtienes codo con codo con los marcos completos. Una APLICACIÓN .NET 2 (tenga en cuenta que significa EXE, no biblioteca) no se promocionará automáticamente a .NET 4.
Pero si una aplicación .Net 4 carga un ensamblado .Net 2, se carga en el mismo tiempo de ejecución (de lo contrario, podrían compartir información). El ensamblado .Net 2 se carga en el tiempo de ejecución .net 4 utilizando un modo de compatibilidad que se supone que minimiza la rotura en los cambios (principalmente para los cambios de seguridad en .Net 4).
Un ensamblado .Net 2 no puede hacer referencia a un conjunto .Net 4 porque no tendría características.
La única excepción a esto que conozco es si carga un ensamblado .Net desde una aplicación C++. La aplicación C++ puede cargar y alojar dos tiempos de ejecución. Podría tener un ensamblado .Net 2 y un conjunto .Net 4 cargado, pero no podrían comunicarse directamente entre sí. Así es como funcionan los Proc CLR en SQL Server. Puede tener .Net 2 CLR Proc y .Net 4 CLR Proc que no se comunican, pero ambos están cargados en el servidor.
Hubo un excelente artículo en MSDN Magazine sobre el alojamiento de .Net framework recientemente, pero no lo puedo encontrar ahora. Tal vez alguien más puede publicar el enlace.
Así que debería ser capaz de cargar casi cualquier ensamblado .Net 2 en un ejecutable .Net 4 sin mucho problema. Los únicos problemas que he visto son los permisos de seguridad.
No sé si está hablando del artículo "API de alojamiento de CLR": msdn.microsoft.com/en-us/magazine/cc163567.aspx – user276648