无法在appDomain中加载程序集

时间:2013-06-10 09:05:41

标签: .net-assembly appdomain assembly.load appdomainsetup

直到最近,我通过调用Assembly.LoadFrom加载我的程序集,它没问题。但是现在我需要在临时的appDomain中加载它,但是当我尝试在临时域中加载程序集时,我一直有一个FileLoadException。我试图将appDomainSetup参数传递给CreateDomain方法,但没有成功。

这是我的代码。

var tempDomain = AppDomain.CreateDomain("TempDomain");
Assembly sampleAssembly = tempDomain.Load(pathToDll);

我的程序集位于我的应用程序基目录的子目录中

1 个答案:

答案 0 :(得分:0)

AppDomain.Load将程序集加载到当前正在执行的AppDomain中,而不是“TempDomain”中。正如MSDN文档中所述:

  

此方法仅用于将装配加载到当前   应用领域。提供此方法是为了方便   无法调用静态Assembly.Load的互操作性调用者   方法。要将程序集加载到其他应用程序域,请使用a   CreateInstanceAndUnwrap等方法。

现在,在您的情况下,调用失败,因为当前正在执行的AppDomain(很可能是您的主AppDomain)无法从子目录中找到程序集。当您尝试在加载上下文中加载程序集时,应确保这些程序集位于以下某个位置:

  1. AppDomain的基础目录
  2. 在AppDomain的专用bin路径中指定的基础目录的子目录
  3. GAC
  4. 有关详细信息,请查看以下文章:

    How the Runtime Locates Assemblies

    Best Practices for Assembly Loading

    Back to Basics: Using Fusion Log Viewer to Debug Obscure Loader Errors