搜索位置以什么顺序加载引用的DLL?

时间:2008-09-08 15:45:26

标签: .net dll

我知道.NET框架在多个位置查找引用的DLL

  • 全局程序集缓存(GAC)
  • 添加到AppDomain的所有私有路径
  • 执行程序集的当前目录

这些地点的搜索顺序是什么?如果找到匹配项或者它是否继续通过所有位置搜索DLL是否已停止(如果是,则如何解决冲突)?

此外,请确认或拒绝这些地点,并提供我未提及的任何其他地点。

3 个答案:

答案 0 :(得分:54)

程序集加载是一个相当复杂的过程,它取决于许多不同的因素,如配置文件,发布者策略,appdomain设置,CLR主机,部分或完整程序集名称等。

简单版本是GAC是第一个,然后是私有路径。从不使用%PATH%。

最好使用Assembly Binding Log Viewer (Fuslogvw.exe)来调试任何程序集加载问题。

修改 http://msdn.microsoft.com/en-us/library/aa720133.aspx更详细地解释了这个过程。

答案 1 :(得分:6)

我发现an article引用了DLL search order上有关

的MSDN文章
  

对于托管代码依赖项,   全局程序集缓存总是占上风;   应用中的本地程序集   如果,目录将不会被选中   有一个(或更新的)   政策)复制GAC。

考虑到这一点,我想MSDN列表是正确的,添加一个

0. Global assembly cache

答案 2 :(得分:2)

“加载DLL时不再首先搜索当前目录!此更改也是在Windows XP SP1中进行的。现在默认行为是首先查看所有系统位置,然后查看当前目录,最后查看任何用户定义的路径。“

(参考 http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx

MSDN上还介绍了可以由应用程序更改的默认搜索顺序: http://msdn.microsoft.com/en-us/library/ms682586.aspx