search位置以何种顺序加载引用的DLL?
我知道.NET框架在几个位置查找引用的DLL
- 全局程序集caching(GAC)
- 任何私人path添加到AppDomain
- 执行程序集的当前目录
这些地点search的顺序是什么? 如果find一个匹配项,就停止search一个DLL,或者通过所有位置继续search(如果是的话,如何解决冲突)?
另外,请确认或否认这些地点,并提供我没有提及的任何其他地点。
程序集加载是一个相当复杂的过程,取决于许多不同的因素,如configuration文件,发布者策略,应用程序域设置,CLR主机,部分或全部程序集名称等。
简单的版本是GAC第一,然后是私人path。 从来没有使用%PATH%。
最好使用程序集绑定日志查看器(Fuslogvw.exe)来debugging任何程序集加载问题。
编辑 http://msdn.microsoft.com/en-us/library/aa720133.aspx更详细地解释过程。;
我发现一篇文章引用了关于DLLsearch顺序的MSDN文章
对于托pipe代码依赖性,全局程序集caching始终占上风; 如果GAC中存在(或更新的策略)副本,应用程序目录中的本地程序集将不会被拾取。
考虑到这一点,我猜测MSDN列表是正确的一个补充
全局程序集caching
“加载DLL时不再是当前search的目录!这个改变也是在Windows XP SP1中进行的。现在的默认行为是首先查看所有的系统位置,然后是当前目录,最后是任何用户定义的path。 “
(参考http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx )
默认的serach顺序,可以由应用程序更改,也在MSDN上进行了描述: http : //msdn.microsoft.com/en-us/library/ms682586.aspx