È possibile caricare due versioni del runtime .NET nello stesso processo?
-
03-07-2019 - |
Domanda
Ci sono due scenari che devo chiarire:
-
Un eseguibile compilato con .NET 3.5 deve utilizzare una libreria compilata con .NET 1.1 e la libreria deve essere eseguita sul runtime 1.1.
-
Un eseguibile compilato con .NET 1.1 deve utilizzare una libreria compilata con .NET 3.5.
Non riesco a trovare una fonte affidabile che affermi che non è possibile caricare due versioni del runtime .NET e la documentazione di Microsoft è molto vaga su questo argomento.
Soluzione
No: non è possibile caricare il CLR nello stesso processo due volte. Consulta la documentazione per Hosting CLR
Come per le versioni precedenti di runtime, CorBindToRuntimeEx La funzione inizializza il runtime. tu può scegliere quale versione di runtime da caricare, ma un processo può ospita solo una versione .
Altri suggerimenti
.NET 4 promette di consentire l'hosting di diverse versioni CLR nello stesso processo mediante In-Process Side by Side .
Per il caso n. 1, c'è qualche motivo particolare (per esempio, interrompere le modifiche) che richiede che la libreria sia ospitata nel runtime 1.1? È possibile esporre la libreria tramite un servizio Web compilato 1.1 e avere invece il punto eseguibile sul servizio Web? (O qualche altra tecnica di remoting, per ottenere la libreria nel suo processo?)
Per il caso n. 2, è possibile ricompilare l'app 1.1 in 2.0 / 3.5, in modo che possa risiedere nello stesso processo?
In ogni caso, Rob Walker ha ragione (e ho effettuato l'upgrade): semplicemente non puoi ospitare 2 versioni del runtime nello stesso processo. Quindi devi aggirarlo in qualche modo. Immagino che in entrambi i casi, la fonte deve essere disponibile, quindi dovrebbero essere riprodotte ricompilazioni e test.