Я хочу загрузить новую сборку AppDomain
, которая имеет сложное дерево ссылок (MyDll.dll → Microsoft.Office.Interop.Excel.dll → Microsoft.Vbe.Interop.dll → Office.dll → stdole.dll)
Насколько я понял, когда сборка загружается в AppDomain
, ее ссылки не будут загружаться автоматически, и я должен загрузить их вручную.
Поэтому, когда я это делаю:
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));
и получил FileNotFoundException
:
Не удалось загрузить файл или сборку "MyDll, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null" или одну из его зависимостей. Система не может найти указанный файл.
Я думаю, что ключевая часть одна из его зависимостей.
Хорошо, я делаю следующее перед domain.Load(AssemblyName.GetAssemblyName(path));
foreach (AssemblyName refAsmName in Assembly.ReflectionOnlyLoadFrom(path).GetReferencedAssemblies())
{
domain.Load(refAsmName);
}
Но снова получил FileNotFoundException
, на другой (ссылочной) сборке.
Как загрузить все рекурсивные ссылки?
Нужно ли создавать дерево ссылок перед загрузкой корневой сборки? Как получить ссылки на сборку без его загрузки?