¿Es posible cargar dos versiones del tiempo de ejecución de .NET en el mismo proceso?
-
03-07-2019 - |
Pregunta
Hay dos escenarios que debo aclarar:
-
Un ejecutable compilado con .NET 3.5 necesita usar una biblioteca compilada con .NET 1.1 y la biblioteca debe ejecutarse en el tiempo de ejecución 1.1.
-
Un ejecutable compilado con .NET 1.1 necesita usar una biblioteca compilada con .NET 3.5.
No puedo encontrar una fuente confiable que indique que no es posible cargar dos versiones del tiempo de ejecución .NET y que la documentación de Microsoft es muy vaga al respecto.
Solución
No: no puede cargar el CLR en el mismo proceso dos veces. Consulte la documentación para Alojamiento de CLR
Al igual que con las versiones anteriores de la runtime, el CorBindToRuntimeEx La función inicializa el tiempo de ejecución. usted Puede elegir qué versión de la runtime para cargar, pero un proceso puede alojar solo una versión .
Otros consejos
.NET 4 promete habilitar el hospedaje de diferentes versiones de CLR en el mismo proceso mediante En proceso Side by Side .
Para el caso # 1, ¿hay alguna razón en particular (por ejemplo, romper cambios) que requiera que la biblioteca esté alojada en el tiempo de ejecución 1.1? ¿Es posible exponer la biblioteca a través de un servicio web compilado 1.1 y tener el punto ejecutable al servicio web en su lugar? (¿O alguna otra técnica remota para obtener la biblioteca en su propio proceso?)
Para el caso # 2, ¿es posible recompilar la aplicación 1.1 bajo 2.0 / 3.5, de manera que pueda residir en el mismo proceso?
En cualquier caso, Rob Walker tiene razón (y yo voté): simplemente no puedes alojar 2 versiones del tiempo de ejecución en el mismo proceso. Así que tienes que trabajar alrededor de alguna manera. Me imagino que en ambos casos, la fuente debe estar disponible, por lo que deben jugarse las recompilaciones y las reevaluaciones.