我知道 .NET 框架会在多个位置查找引用的 DLL
- 全局程序集缓存 (GAC)
- 添加到 AppDomain 的任何私有路径
- 执行程序集的当前目录
这些位置的搜索顺序是什么?如果找到匹配项,是否停止对 DLL 的搜索,还是继续搜索所有位置(如果是,如何解决冲突)?
另外,请确认或否认这些地点,并提供我未提及的任何其他地点。
程序集加载是一个相当复杂的过程,它取决于许多不同的因素,例如配置文件、发布者策略、应用程序域设置、CLR 主机、部分或完整程序集名称等。
简单的版本是首先是 GAC,然后是私有路径。%PATH% 从未使用过。
最好使用程序集绑定日志查看器 (Fuslogvw.exe)来调试任何程序集加载问题。
编辑 http://msdn.microsoft.com/en-us/library/aa720133.aspx更详细地解释了该过程。
“加载 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