/ / Coger carga dll - .net, dll, load, ondemand

Captura de carga dll - .net, dll, load, ondemand

Estoy tratando de construir un paquete de software de cliente .NET que descargue sus componentes a pedido.

Digamos que tengo un programa que se divide en unPrincipal ejecutable y otros 20 archivos dll. El programa principal hace referencia a 3 de ellos, hacen referencia a otros, de todos modos ... tienen algún tipo de estructura de dependencia tipo árbol.

Lo que estoy tratando de lograr es distribuir solo el ejecutable principal y obtener todo lo demás desde una ubicación de servidor a pedido.

Algo como esto: El programa principal y todos estos proyectos dll están en una sola solución y se construyen juntos como cualquier otra solución. Mientras se distribuye, solo se distribuye el archivo ejecutable, las otras DLL (incluidas algunas bibliotecas de terceros utilizadas) se colocan en una ubicación de servidor disponible para descargar.

El exe se ejecuta, muestra alguna interfaz de usuario, cuando el usuario hace clicse mostrará un elemento del menú, otra ventana de la interfaz de usuario desde uno de los archivos dll para que el sistema operativo busque el dll (que no está allí), intervengo, descargo el dll requerido del servidor, lo pongo al lado del exe y permito que OS lo carga como si estuviera allí desde el principio.

Esto parece alcanzable por el uso de un comúnClase de interfaz y algo de magia de reflexión, pero esperaba algo más, algo que incluye la construcción de las DLL en una sola solución, algo que incluye la descarga a pedido de bibliotecas de terceros.

¿Alguna idea de como hacer esto?

Respuestas

1 para la respuesta № 1

Usted está buscando el AppDomain.AssemblyResolve evento, que te permite cargar ensamblajes desde ubicaciones personalizadas.
Usted no necesita ninguna otra reflexión.


1 para la respuesta № 2

Proporcione controladores de eventos para los eventos AppDomain.ResolveAssembly y AppDomain.ResolveType para su appdomain actual y cargue los ensamblajes.

Pero tenga cuidado de cargar los ensamblajes en el contexto correcto: http://msdn.microsoft.com/en-us/library/dd153782.aspx


1 para la respuesta № 3

Puede realizar el evento AssemblyResolve, que se activa cuando no se encuentra un ensamblaje, y luego descargar el ensamblaje que intenta encontrar.

Deberías leer este artículo.