Ist es möglich, zwei Versionen der .NET-Laufzeit im selben Prozess zu laden?

Es gibt zwei Szenarien, die ich klären muss:

  1. Eine mit .NET 3.5 kompilierte ausführbare Datei muss eine mit .NET 1.1 kompilierte Bibliothek verwenden, und die Bibliothek muss unter der 1.1-Laufzeit ausgeführt werden.

  2. Eine mit .NET 1.1 kompilierte ausführbare Datei muss eine mit .NET 3.5 kompilierte Bibliothek verwenden.

Ich kann keine zuverlässige Quelle finden, die besagt, dass es nicht möglich ist, zwei Versionen der .NET-Laufzeitumgebung zu laden, und die Microsoft-Dokumentation ist in dieser Hinsicht sehr vage.

5

3 Antworten

No -- you can't load the CLR into the same process twice. See the documentation for CLR Hosting

Wie bei früheren Versionen der   Laufzeit, die CorBindToRuntimeEx   Funktion initialisiert die Laufzeit. Sie   kann wählen, welche Version des   Laufzeit zu laden, aber ein Prozess kann    Nur eine Version hosten .

7
hinzugefügt
Sie können, wenn Sie die .NET 4.0-Hosting-API anstelle der. NET 2.0-Hosting-API verwenden ...
hinzugefügt der Autor Len Holgate, Quelle

.NET 4 verspricht, das Hosting verschiedener CLR-Versionen im selben Prozess über In-Prozess Seite an Seite .

3
hinzugefügt

Gibt es in Fall # 1 einen bestimmten Grund (sagen wir, Änderungen zu brechen), der erfordert, dass die Bibliothek in der 1.1-Laufzeit gehostet wird? Ist es möglich, die Bibliothek über einen 1.1-kompilierten Webdienst verfügbar zu machen und die ausführbare Datei stattdessen auf den Webdienst verweisen zu lassen? (Oder eine andere Remoting-Technik, um die Bibliothek in ihren eigenen Prozess zu bringen?)

Für Fall 2, ist es möglich, die 1.1 App unter 2.0/3.5 neu zu kompilieren, so dass sie in demselben Prozess liegen kann?

In jedem Fall hat Rob Walker Recht (und ich habe Upvoted) - Sie können einfach 2 Versionen der Laufzeit nicht im selben Prozess hosten. Also musst du irgendwie damit umgehen. Ich würde mir vorstellen, dass in beiden Fällen Quelle verfügbar sein muss, so dass Neukompilierungen und erneute Tests spielen sollten.

2
hinzugefügt
John, du hast Recht, wir werden es umgehen müssen, da das Ändern des Codes nicht wünschenswert ist. Ich wollte nur sicher sein, dass wir die einfachere Lösung nicht übersehen.
hinzugefügt der Autor CodeForNothing, Quelle