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?

questionAnswers(8)

yourAnswerToTheQuestion