详解.NET程序集“.NET研究”的加载规则
2011-10-19 19:38 狼人:-) 阅读(224) 评论(0) 编辑 收藏 举报程序集的加载涉及到很多方面的知识,包括配置文件、全局缓存装配、私有目录等的查找。用LoadAWithPartialName方法加载程序集,必须提供程序集的文本名称,还可以包公钥标记、版本或区域性等,但不必包含完全引用信息,如名称、版本、区域性、公钥标记。
使用(System.Reflection.Assembly.Load)并仅指定部分引用,运行库在全局程序集缓存和应用程序根目录中对程序集进行检查。使用LoadWithPartialName方法并仅指定部分引用,运行库在应用程序目录中和全局程序集缓存中对程序集进行检查。另外,提供部分引用,可在应用程序集的配置文件中提供完全引用的信息上海企业网站制作。
使用Load提供部分引用程序集的查找:
1. 在应用程序的配置文件中检查
<qualifyAssembly>元素中相关的限定信息,如果找到了,则将部分引用的限制条件转化为新的引用限定条件。假如:
<qualifyAssembly partialName="mydll"
fullName="mydll,version=1.0.0.1,publicKeyToken=xxx,culture=zh-CN">
当发生以下调用时:Assembly a=Assembly.Load("mydll"); 则将条件转化为更强的条件"mydll,version=1.0.0.1,public上海网站建设KeyToken=xxx,culture=zh-CN".
2. 根据指定的限定条件在全局程序集缓存中匹配
如果上海徐汇企业网站制作有一个或多个匹配项,则取第一个匹配的程序集,进入第4步,否则就进入第3步。
3. 在应用程序目录下根据更强的限定条件匹配
如果有一个或多个匹配,就取第一个,进入第4步,否则局部引用失败
4. 如果指定了版本策略,则对匹配的程序集应用版本策略




根据版本策略,最后加载的是新版本"mydll,publicKeyToken=xxx,culture=zh-CN,version=1.2.0.0"。假如是LoadPartialName 则先从应用程序根目录下匹配,没找到匹配项则从全局程序集缓存中去匹配...一样也应用版本策略,匹配的过程中,还要考虑到区域性文化的问题,如:











在全局程序集缓存中有:
mydll,version="1.2.0.0",publicKeyToken=xxx,culture=zh-CN
和
mydll,version="1.3.0.0",publicKeyToken=xxx,culture=en-US
在私有目录下有:
mydll,version="1.3.0.0",publicKeyToken=xxx,culture=zh-CN
mydll,version="1.3.0.0",publicKeyToken=xxx,culture=en-US
则找到的是私有目录下:mydll,version="1.3.0.0",publicKeyToken=xxx,culture=zh-CN
第一步转化为更强的限定条件:mydll,version="1.2.0.0",publicKeyToken=xxx,culture=zh-CN, 在全局程序集缓存中查找,并根据culture寻找匹配,在应用版本策略和区域性匹配后,没找到1.3.0.0版本,就到私有目录下匹配...
-- 摘自《精通.NET核心技术原理与框架》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南