He intentado descifrar éste en las últimas semanas y aún no he encontrado una buena solución; con suerte puedo obtener una respuesta aquí.Cargando 2 versiones de ensamblaje en el tiempo de ejecución
Tengo dos conjuntos (ZA & ZB), que apuntan a un proyecto/dll común (ZC) pero que podrían tener una versión diferente (es decir, el mismo nombre dll, los mismos espacios de nombres, algunas clases pueden ser diferentes) . Cada ensamblaje funciona solo, sin embargo, si uno es cargado por el otro en tiempo de ejecución (por ejemplo, A carga B), entonces no puedo hacer que funcione. Necesito ayuda.
Aquí está la configuración:
- ZA depende de ZC versión (común) 1.1
- ZB depende de la versión ZC 1,0
ZA necesita cargar necesidades para cargar algo en ZB (que depende de ZC), en tiempo de ejecución.
ZA es la aplicación maestra. En su directorio bin
, hay un directorio de complementos plugins/plugin-ZB
en el que me gustaría colocar todos los ZB y sus dependencias (ZC).
Aquí es lo que he probado hasta ahora:
Assembly.Load()
usando misma versión de DLL - funcionaba bien.
Assembly.Load()
usando diferentes versiones de cargas dll-ZB, pero cuando se ejecuta el método, obtengo una excepción de método no encontrado.
AppDomain.Load()
obtuvo un error de archivo no encontrado; Incluso usé el delegado para resolver ensamblajes.
Algunos detalles sobre ZC: - algunos métodos son públicos estáticos (algunos no). P.ej. Log.Log("hello");
- algunos pueden devolver valores (primitivos u objetos). - algunos métodos no son estáticos (y devuelven valores).
¿Ayuda? - TIA
"Sólo puede tener una versión de un conjunto para un dominio de aplicación" no es cierto. Incluso es posible hacer referencia a dos versiones de un ensamblaje desde un único ensamblaje, buscar alias externo para obtener más información, esto es lo primero que aparece en Google con un ejemplo de la función: http://blogs.msdn.com/ b/ansonh/archive/2006/09/28/extern-alias-walkthrough.aspx – Graham
Sin embargo, el uso de dos AppDomains es una solución al problema descrito. – Graham
¡Bien, respuesta actualizada! –