Cargar un ensamblaje/módulo en un ensamblaje dinámico
-
13-12-2019 - |
Pregunta
Tengo un ensamblaje que ya está creado, digamos Static.dll
, y un ensamblaje dinámico que estoy creando en tiempo de ejecución, digamos Dynamic
. Dynamic
crea algún código IL para crear un nuevo tipo a partir de Static.dll
.Cuando Dynamic
se crea (se guarda correctamente), el ejecutable, cuando se ejecuta, produce errores porque no puede cargar el ensamblaje Static.dll
tipo.Creo que esto está sucediendo desde el Dynamic
La salida exe no puede encontrar este dll (o al menos eso es lo que supongo).
¿Cómo se puede lograr agregar esto? Static.dll
referencia para que cuando alguien ejecute el resultado ejecutable resultante de Dynamic
¿Que puede encontrar los tipos referenciados?
Se acerca de Assembly.Load()
, pero esto por sí solo no cambia nada.O al menos, no estoy seguro de qué me proporciona esto, ya que no necesito usar el tipo en tiempo de ejecución, sino cuando ejecuto el Dynamic
ejecutable.
Por último, controlo el Static.dll
, entonces, si hay algo que pueda hacer con el proyecto para solucionarlo, se podría hacer, sin embargo, es necesario que permanezca separado (no quiero emitir esta biblioteca cada vez que creo un ensamblaje dinámico).Básicamente, yo pensar Quiero tener mi asamblea dinámica para tener un .assembly extern mscorlib
en su manifiesto guardar Static
es el lugar del mscorlib.
Gracias
Solución
¿Cómo se puede lograr agregar esto?
Static.dll
referencia para que cuando alguien ejecute el resultado ejecutable resultante deDynamic
¿Que puede encontrar los tipos referenciados?
La referencia se agregará automáticamente.Tenga en cuenta que las reglas normales de sondeo de ensamblajes se aplican cuando se ejecuta su ensamblaje dinámico, para encontrar el ensamblaje.Debes (uno de):
- enviar static.dll junto condynamic.dll
- coloque static.dll en el GAC (pero por favor:¡no hagas esto!)
- ejecute Dynamic.dll en un AppDomain personalizado con una configuración de ruta de sondeo personalizada que permita encontrar static.dll
- manejar AppDomain.AssemblyResolve para proporcionar static.dll
- use algo como ILMerge para fusionar static.dll ydynamic.dll