Este posibil să încărcați două versiuni ale runtime-ului .NET în același proces?

Există două scenarii pe care trebuie să le clarific:

  1. Un executabil compilat cu .NET 3.5 trebuie să folosească o bibliotecă compilată cu .NET 1.1, iar biblioteca trebuie să ruleze pe timpul de execuție 1.1.

  2. Un executabil compilat cu .NET 1.1 trebuie să folosească o bibliotecă compilată cu .NET 3.5.

Nu găsesc o sursă sigură indicând că nu este posibilă încărcarea a două versiuni ale runtimei .NET, iar documentația Microsoft este foarte vagă în această privință.

5

3 răspunsuri

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

Ca și în versiunile anterioare ale   runtime, CorBindToRuntimeEx   funcția inițializează timpul de execuție. Tu   poate alege ce versiune de   runtime pentru încărcare, dar un proces poate    găzdui o singură versiune .

7
adăugat
Puteți să utilizați API-ul .Net 4.0 ce găzduiește mai degrabă decât API-ul .Net 2.0 hosting ...
adăugat autor Len Holgate, sursa

.NET 4 promite să permită găzduirea diferitelor versiuni CLR în același proces prin intermediul In-Process Side-by-Side .

3
adăugat

Pentru cazul # 1, există vreun motiv special (de exemplu, ruperea modificărilor) care necesită ca biblioteca să fie găzduită în timpul de execuție 1.1? Este posibil să expuneți biblioteca printr-un serviciu web compilat 1.1 și să aveți punctul executabil către serviciul web? (Sau o altă tehnică de remoting, pentru a obține biblioteca în propriul proces?)

Pentru cazul # 2, este posibil să recompilați aplicația 1.1 sub 2.0/3.5, astfel încât să poată locui în același proces?

În orice caz, Rob Walker are dreptate (și am creat-o) - pur și simplu nu puteți găzdui două versiuni ale runtime-ului în același proces. Deci trebuie să o rezolvi într-un fel. Mi-aș imagina că în ambele cazuri, sursa trebuie să fie disponibilă, deci recompilarea și retestarea ar trebui să se joace.

2
adăugat
John, ai dreptate, va trebui să rezolvăm problema, schimbarea codului nu este de dorit. Vroiam doar să fiu sigur că nu am fost supuși unei soluții mai simple.
adăugat autor CodeForNothing, sursa