我知道.NET框架在几个位置查找引用的DLL
全局程序集缓存(GAC)
添加到AppDomain的任何私有路径
执行程序集的当前目录
这些地点的搜索顺序是什么?如果找到匹配项或者它是否继续通过所有位置(如果是,解决冲突的方式),是否停止搜索DLL?
此外,请确认或否认这些地点,并提供我未提及的任何其他地点.
程序集加载是一个相当复杂的过程,它依赖于许多不同的因素,如配置文件,发布者策略,appdomain设置,CLR主机,部分或完整程序集名称等.
简单的版本是GAC是第一个,然后是私有路径.从不使用%PATH%.
最好使用程序集绑定日志查看器(Fuslogvw.exe)来调试任何程序集加载问题.
编辑 http://msdn.microsoft.com/en-us/library/aa720133.aspx更详细地解释了该过程.
我发现了一篇文章引用的MSDN文章DLL搜索顺序,说
对于托管代码依赖项,全局程序集缓存始终占优势; 如果GAC中存在(或更新的策略)副本,则不会获取应用程序目录中的本地程序集.
考虑到这一点,我想MSDN列表是正确的添加一个
0. Global assembly cache