La réponse ci-dessus est incorrecte. Vous obtenez côte à côte avec les cadres complets. Une application .Net 2 (notez que signifie EXE, pas la bibliothèque) ne fera pas la promotion automatique à .Net 4.
Mais si une application .Net 4 charge un assembly .Net 2, elle est chargée dans le même runtime (sinon comment pourraient-ils partager l'information). L'assembly .Net 2 est chargé dans le runtime .net 4 en utilisant un mode de compatibilité supposé minimiser les ruptures de modifications (principalement pour les changements de sécurité dans .Net 4).
Un assembly .Net 2 ne peut pas référencer un assembly .Net 4 car il ne possède pas de fonctions.
La seule exception à ce que je sais est si vous chargez un assembly .Net à partir d'une application C++. L'application C++ peut charger et héberger deux runtimes. Un assembly .Net 2 et un assembly .Net 4 peuvent être chargés, mais ils ne peuvent pas se parler directement. C'est ainsi que les procédures CLR fonctionnent dans SQL Server. Vous pouvez avoir un .NET 2 CLR Proc et un .NET 4 CLR Proc qui ne communiquent pas, mais qui sont tous deux chargés sur le serveur.
Il y avait un excellent article sur MSDN Magazine sur l'hébergement du framework .Net récemment, mais je ne le trouve pas maintenant. Peut-être que quelqu'un d'autre peut poster le lien.
Vous devriez donc pouvoir charger n'importe quel assemblage .Net 2 dans un exécutable .Net 4 sans trop de problèmes. Les seuls problèmes que j'ai vus sont avec les permissions de sécurité.
Je ne sais pas si vous parlez de l'article "CLR Hosting APIs": msdn.microsoft.com/en-us/magazine/cc163567.aspx – user276648