AppDomain
中。据我所知,当一个程序集被加载到
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
,这次是在另一个(被引用的)程序集上。
如何递归加载所有引用?
我是否需要在加载根程序集之前创建引用树?如何在不加载程序集的情况下获取程序集的引用?