关于.net:搜索位置以什么顺序加载引用的DLL?

关于.net:搜索位置以什么顺序加载引用的DLL?

In what order are locations searched to load referenced DLLs?

我知道.NET框架会在多个位置查找引用的DLL。

  • 全局程序集缓存(GAC)
  • 任何添加到AppDomain的私有路径
  • 执行程序集的当前目录

这些位置是按什么顺序搜索的? 如果找到匹配项,是否停止了对DLL的搜索,或者它在所有位置都继续进行(如果是,则如何解决冲突)?

另外,请确认或拒绝这些位置,并提供我没有提及的其他任何位置。


程序集加载是一个相当复杂的过程,它取决于许多不同的因素,例如配置文件,发布者策略,appdomain设置,CLR主机,部分或完整程序集名称等。

简单的版本是,GAC首先,然后是私有路径。从未使用%PATH%。

最好使用程序集绑定日志查看器(Fuslogvw.exe)调试任何程序集加载问题。

编辑
http://msdn.microsoft.com/zh-cn/library/aa720133.aspx更详细地说明了此过程。


我发现有一篇文章引用了DLL搜索顺序上的MSDN文章,内容为

For managed code dependencies, the
Global Assembly Cache always prevails;
the local assembly in application
directory will not be picked up if
there is an existing (or newer with
policy) copy in the GAC.

考虑到这一点,我猜MSDN列表是正确的

1
0. Global assembly cache

"加载DLL时,不再首先搜索当前目录!在Windows XP SP1中也进行了此更改。现在的默认行为是先查找所有系统位置,然后是当前目录,最后是所有用户定义的路径。"

(参考http://weblogs.asp.net/pwilson/archive/2003/06/24/9214.aspx)

MSDN上也描述了默认的搜索顺序,可以通过应用程序来更改它:http://msdn.microsoft.com/zh-cn/library/ms682586.aspx


推荐阅读

    linux命令查找内容?

    linux命令查找内容?,命令,文件,网络,名称,信息,工作,标准,系统,管理,位置,lin

    linux设备加载命令?

    linux设备加载命令?,系统,设备,信息,电脑,第一,命令,文件,分区,磁盘,详细信

    linux命令防火墙位置?

    linux命令防火墙位置?,系统,服务,软件,密码,状态,位置,防火墙,工具,公共,设

    linux网卡加载命令行?

    linux网卡加载命令行?,系统,地址,代码,网络,设备,电脑,名称,网卡,技术指标,

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linux命令刷新加载?

    linux命令刷新加载?,系统,下来,工具,网上,命令,终端,环境变量,以下,文件,路

    linux查找包的命令?

    linux查找包的命令?,基础,软件,项目,数据,名称,命令,环境,技术,文件,子目录,

    linux命令搜索大全?

    linux命令搜索大全?,地址,工作,系统,命令,管理,目录,标准,基础,工具,网络,lin

    linux搜索过去命令?

    linux搜索过去命令?,系统,信息,命令,名称,工作,预期,数字,地址,标准,服务,Lin

    加载linux内核的命令?

    加载linux内核的命令?,系统,信息,地址,电脑,发行,设备,简介,平台,发展,基础,l

    linux命令搜索命令?

    linux命令搜索命令?,系统,位置,地址,标准,管理,信息,命令,名称,工作,文件,Lin

    linux命令查找字符串?

    linux命令查找字符串?,工具,信息,命令,字符串,系统,工作,文件,范本,样式,文

    linux加载没有的命令?

    linux加载没有的命令?,系统,服务,工具,信息,设备,标准,工作,命令,检测,代码,

    linux日志搜索命令?

    linux日志搜索命令?,信息,系统,对比,工具,一致,日志,文件,命令,实时,网络,lin

    linux命令字符搜索?

    linux命令字符搜索?,系统,工具,命令,灵活,信息,工作,字符串,文本,文件,模式,l

    linux光标位置命令?

    linux光标位置命令?,位置,光标,时间,系统,状态,终端,命令,程序,文件,菜单,lin

    linux查找权限命令?

    linux查找权限命令?,系统,地址,工作,命令,文件,信息,概念,时间,标准,权限,Lin

    linux查找和替换命令?

    linux查找和替换命令?,工作,系统,数据,字符串,文件,命令,实时,管理,首次,信

    linux命令查找内存?

    linux命令查找内存?,情况,系统,信息,工具,状态,分析,数字,内存,命令,适当,怎

    linux查找文件名命令?

    linux查找文件名命令?,系统,信息,工具,命令,文件,字符串,样式,管道,文本,动