为了账号安全,请及时绑定邮箱和手机立即绑定

以什么顺序搜索位置以加载引用的DLL?

/ 猿问

以什么顺序搜索位置以加载引用的DLL?

慕运维8079593 2019-11-15 13:17:53

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

  • 全局程序集缓存(GAC)

  • 添加到AppDomain的所有私有路径

  • 执行程序集的当前目录

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

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


查看完整描述

3 回答

?
浮云间

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


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


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


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


查看完整回答
反对 回复 2019-11-15
?
达令说

我发现了一篇文章引用的MSDN文章DLL搜索顺序,说


对于托管代码依赖性,始终优先使用Global Assembly Cache。如果GAC中存在现有(或更新的策略)副本,则不会提取应用程序目录中的本地程序集。


考虑到这一点,我猜想MSDN列表是正确的,另外还有一个


0.全局程序集缓存


查看完整回答
反对 回复 2019-11-15
?
慕桂英3389331

“加载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


查看完整回答
反对 回复 2019-11-15
  • 3 回答
  • 0 关注
  • 70 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信