我知道.NET框架在多个位置查找引用的DLL
这些地点的搜索顺序是什么?如果找到匹配项或者它是否继续通过所有位置搜索DLL是否已停止(如果是,则如何解决冲突)?
此外,请确认或拒绝这些地点,并提供我未提及的任何其他地点。
答案 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