首页 / 知识

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

2023-04-14 13:53:00

关于.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


位置引用加载搜索

最新内容

相关内容

猜你喜欢