Quiero cargar a un nuevo AppDomain
algún ensamblado que tenga un árbol de referencias complejas (MyDll.dll -> Microsoft.Office.Interop.Excel.dll -> Microsoft.Vbe.Interop.dll -> Office.dll -> stdole .dll)Cómo cargar un ensamblado en AppDomain con todas las referencias recursivamente?
Según tengo entendido, cuando se carga un ensamblaje en AppDomain
, sus referencias no se cargan automáticamente, y tengo que cargarlas manualmente. Así que cuando lo haga:
string dir = @"SomePath"; // different from AppDomain.CurrentDomain.BaseDirectory
string path = System.IO.Path.Combine(dir, "MyDll.dll");
AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
setup.ApplicationBase = dir;
AppDomain domain = AppDomain.CreateDomain("SomeAppDomain", null, setup);
domain.Load(AssemblyName.GetAssemblyName(path));
y me FileNotFoundException
:
No se pudo cargar el archivo o ensamblado 'MyDll, versión = 1.0.0.0, Culture = neutral, PublicKeyToken = null' o uno de sus dependencias. El sistema no puede encontrar el archivo especificado.
Creo que la parte clave es una de sus dependencias.
Ok, es el siguiente paso antes de domain.Load(AssemblyName.GetAssemblyName(path));
foreach (AssemblyName refAsmName in Assembly.ReflectionOnlyLoadFrom(path).GetReferencedAssemblies())
{
domain.Load(refAsmName);
}
Pero tiene FileNotFoundException
de nuevo, en otro montaje (referencia).
¿Cómo cargar todas las referencias recursivamente?
¿Tengo que crear el árbol de referencias antes de cargar el ensamblaje raíz? ¿Cómo obtener las referencias de un ensamblaje sin cargarlo?
He cargado montajes como este varias veces, nunca he tenido que cargar manualmente todas sus referencias. No estoy seguro de que la premisa de esta pregunta sea correcta. – Mick