题
我知道 .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
不隶属于 StackOverflow