Voglio caricare su un nuovo AppDomain
un assembly che ha un albero di riferimenti complessi (MyDll.dll -> Microsoft.Office.Interop.Excel.dll -> Microsoft.Vbe.Interop.dll -> Office.dll -> stdole .dll)Come caricare un assieme su AppDomain con tutti i riferimenti in modo ricorsivo?
Per quanto ho capito, quando un assembly viene caricato su AppDomain
, i suoi riferimenti non verrebbero caricati automaticamente e devo caricarli manualmente. Così, quando lo faccio:
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));
e ottenuto FileNotFoundException
:
Impossibile caricare il file o l'assembly 'MyDll, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' o uno dei suoi dipendenze. Il sistema non trova il file specificato.
Penso che la parte chiave sia una delle sue dipendenze.
Ok, devo fare prima domain.Load(AssemblyName.GetAssemblyName(path));
foreach (AssemblyName refAsmName in Assembly.ReflectionOnlyLoadFrom(path).GetReferencedAssemblies())
{
domain.Load(refAsmName);
}
Ma got FileNotFoundException
ancora una volta, su un altro di montaggio (riferimento).
Come caricare tutti i riferimenti in modo ricorsivo?
Devo creare un albero dei riferimenti prima di caricare l'assemblaggio della radice? Come ottenere i riferimenti di un assembly senza caricarlo?
Ho caricato assiemi come questo molte volte prima, non ho mai dovuto caricare manualmente tutti i suoi riferimenti. Non sono sicuro che la premessa di questa domanda sia corretta. – Mick