0

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

这是我的代码。

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

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

4

1 回答 1

0

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

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

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

  1. AppDomain 的基本目录
  2. 在 AppDomain 的私有 bin 路径中指定的基本目录的子目录
  3. 海关总署

有关更多信息,您可以查看以下文章:

运行时如何定位程序集

装配加载的最佳实践

回归基础:使用 Fusion Log Viewer 调试晦涩的加载程序错误

于 2013-06-11T12:35:11.543 回答