Est-il possible de charger deux versions du runtime .NET dans le même processus?
-
03-07-2019 - |
Question
Il y a deux scénarios que je dois clarifier:
-
Un exécutable compilé avec .NET 3.5 doit utiliser une bibliothèque compilée avec .NET 1.1 et la bibliothèque doit être exécutée à l'exécution 1.1.
-
Un exécutable compilé avec .NET 1.1 doit utiliser une bibliothèque compilée avec .NET 3.5.
Je ne trouve pas de source fiable indiquant qu'il est impossible de charger deux versions du moteur d'exécution .NET et que la documentation de Microsoft est très vague sur ce sujet.
La solution
Non, vous ne pouvez pas charger le CLR dans le même processus deux fois. Consultez la documentation pour Hébergement CLR
.Comme avec les versions précédentes du runtime, le CorBindToRuntimeEx La fonction initialise le runtime. Vous peut choisir quelle version du exécution à charger, mais un processus peut héberger une seule version .
Autres conseils
.NET 4 promet d’héberger différentes versions du CLR dans le même processus au moyen de En cours de traitement côte à côte .
Pour le cas n ° 1, y a-t-il une raison particulière (par exemple, la rupture des modifications) qui nécessite que la bibliothèque soit hébergée dans le runtime 1.1? Est-il possible d'exposer la bibliothèque via un service Web compilé avec la version 1.1 et de faire en sorte que l'exécutable pointe sur le service Web? (Ou une autre technique de communication à distance, pour que la bibliothèque soit dans son propre processus?)
Pour le cas n ° 2, est-il possible de recompiler l'application 1.1 sous la version 2.0 / 3.5, de sorte qu'elle puisse résider dans le même processus?
Quoi qu’il en soit, Rob Walker a raison (et j’ai voté favorablement). Vous ne pouvez tout simplement pas héberger deux versions du moteur d’exécution dans le même processus. Vous devez donc contourner le problème. J'imagine que dans les deux cas, la source doit être disponible, les recompilations et les nouveaux tests doivent donc être lus.