Como carregar uma montagem no AppDomain com todas as referências recursivamente?
Quero carregar para um novoAppDomain
algum assembly que tenha uma árvore de referências complexa (MyDll.dll -> Microsoft.Office.Interop.Excel.dll -> Microsoft.Vbe.Interop.dll -> Office.dll -> stdole.dll)
Pelo que entendi, quando uma montagem está sendo carregada emAppDomain
, suas referências não seriam carregadas automaticamente e eu tenho que carregá-las manualmente. Então, quando eu faço:
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 pegouFileNotFoundException
:
Não foi possível carregar o arquivo ou assembly 'MyDll, versão = 1.0.0.0, Culture = neutral, PublicKeyToken = null' ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado
Acho que a parte principal éuma de suas dependências.
Ok, eu faço a seguir antesdomain.Load(AssemblyName.GetAssemblyName(path));
foreach (AssemblyName refAsmName in Assembly.ReflectionOnlyLoadFrom(path).GetReferencedAssemblies())
{
domain.Load(refAsmName);
}
But gotFileNotFoundException
novamente, em outra montagem (referenciada
Como carregar todas as referências recursivamente?
Preciso criar uma árvore de referências antes de carregar o assembly raiz? Como obter as referências de uma montagem sem carregá-la?