如何在没有物理DLL的情况下加载引用的DLL

时间:2016-06-07 12:12:18

标签: c#

我正在开发一个"执行者"它将通过反射执行DLL。我将配置一个实现特定接口的DLL,执行器将加载此DLL并基于该接口执行方法。

在某些情况下,配置的DLL可以有另一个引用的DLL,它们不在目录中。

我的问题是:如何加载和执行此程序集没有引用的物理DLL?

例如:

-Executor calls DLL "A".
-DLL "A" references DLL "B" and DLL "C".
-DLL "B" and DLL "C" are not in the directory. 

2 个答案:

答案 0 :(得分:2)

当程序集加载器在运行时解析引用时,缺少的物理文件将始终导致绑定进程失败并出现异常(当应用程序需要该程序集中的代码时,它需要在物理上 - 那个是,在搜索路径的任何地方,包括GAC)。

(即使你会找到一种方法来拦截加载过程 - 这在.NET中是可能的 - 你不会在没有最终以某种方式提供引用程序集的IL的情况下逃脱,无论是通过下载,还是 - 需求汇编等等。

更多信息"运行时如何找到程序集",在此处:https://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.110).aspx

您删除其他依赖项的想法是有意义的(减少" DLL地狱"),要考虑的选项是将多个相互依赖的程序集合并为单个二进制文件,例如此免费工具也是作为NuGet包提供:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

答案 1 :(得分:-1)

假设您不想将这些dll放入工作目录,您需要将dll B和C注册到全局程序集缓存(GAC)

您可以参考this wiki帖子或google GAC更多信息。