我想加载到一个新的 AppDomain
一些程序集,它有一个复杂的引用树(MyDll.dll-> Microsoft)。办公室。互联系统。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
:
Could not load file or assembly 'MyDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
I think the key part is 它的一个附属物.
好的,我在 domain.Load(AssemblyName.GetAssemblyName(path));
之前做下一个
foreach (AssemblyName refAsmName in Assembly.ReflectionOnlyLoadFrom(path).GetReferencedAssemblies())
{
domain.Load(refAsmName);
}
但在另一个(参考)程序集上又得到了 FileNotFoundException
。
如何递归加载所有引用?
在加载根程序集之前是否必须创建引用树? 如何在不加载程序集的情况下获取程序集的引用?