在前一篇文章《CLR查找和加载程序集的方式(一)》中详细介绍了CLR查找和加载程序的方式,分别介绍了配置与代码的实现方式。
本篇通过一个具体的流程图来帮助大家更加直观明了深入的掌握CLR查找DLL程序集的方式。
说明:
(1) 初始化绑定:从元数据中取出相关的AssemblyRef记录,并查看其中包括什么内容--它的外部程序集名称,它是否经过强命名,是否指定了文化等。
(2) 应用版本策略:这是一些由应用程序、被引用的共享程序集发布者或管理员生成的语句。这些语句包含在XML配置文件中,并且只是将程序集的特定版本(或一组版本)重定向到不同的版本。
(3)?codebase:该节点是一个特殊的设置,在配置文件中明确地指定某个程序集的查找路径,这个规则具有最高的优先级。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 而且如果你做了设置,CLR就一定会按照你的设置去查找,如果找不到,它就报告失败,而不会继续查找其他路径。
? ? ? ? ? ? ? ? ? ? ? ? ? ? 需要注意的是,如果程序集是经过了强名称签名,则在定义codebase的时候,应该注明publicKeyToken。
关于probing与codeBase节点设置
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <runtime> 4 <!--双核以上计算机请开启下面的选项为 true--> 5 <gcServer enabled="false" /> 6 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 7 <dependentAssembly> 8 <probing privatePath="bin;bin2\subbin;bin3"/> 9 <assemblyIdentity name="MyTestNetLibrary" 10 publicKeyToken="bf715e7d53keacd4" 11 culture="neutral" /> 12 <codeBase version="1.0.1.0" href="CodeBase\MyTestNetLibrary.dll" /> 13 </dependentAssembly> 14 </assemblyBinding> 15 </runtime> 16 </configuration>
?
关于《程序集加载的最佳做法》,请参考MSDN:?https://msdn.microsoft.com/zh-cn/library/dd153782
?
成在管理,败在经验;嬴在选择,输在不学!? 贵在坚持!
?
欢迎关注作者头条号 张传宁IT讲堂,获取更多IT文章、视频等优质内容。
? ?
?个人作品
? ?
? ? 1、BIMFace.Community.SDK.NET
? ? ?开源地址:https://gitee.com/NAlps/BIMFace.SDK
? ?
? ? 2、ZCN.NET.Common
? ? ?开源地址:https://gitee.com/NAlps/zcn.net.common
?技术栈
? ?
?1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python
?2、jQuery、Vue.js、Bootstrap
?3、数据库:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、达梦DM、人大金仓、 神通、南大通用 GBase、华为 GaussDB 、腾讯 TDSQL 、阿里 PolarDB、蚂蚁金服 OceanBase、东软 OpenBASE、浪潮云溪数据库 ZNBase
?4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分库分表、读写分离
?5、架构:领域驱动设计 DDD、ABP
?6、环境:跨平台、Windows、Linux(CentOS、麒麟、统信UOS、深度Linux)、maxOS、IIS、Nginx、Apach
?7、移动App:Android、IOS、HarmonyOS、微信、小程序、快应用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler
? ?
?云原生、微服务、Docker、CI/CD、DevOps、K8S;
?Dapr、RabbitMQ、Kafka、分布式、大数据、高并发、负载均衡、中间件、RPC、ELK;
?.NET + Docker + jenkins + Github + Harbor + K8S;
出处:www.cnblogs.com/SavionZhang
作者:张传宁 ??微软MCP、系统架构设计师、系统集成项目管理工程师、科技部创新工程师。
??????????专注于微软.NET技术(.NET Core、Web、MVC、WinForm、WPF)、通用权限管理系统、工作流引擎、自动化项目(代码)生成器、SOA 、DDD、 云原生(Docker、微服务、DevOps、CI/CD);PDF、CAD、BIM 审图等研究与应用。
??????????多次参与电子政务、图书教育、生产制造等企业级大型项目研发与管理工作。
??????????熟悉中小企业软件开发过程:需求分析、架构设计、编码测试、实施部署、项目管理。通过技术与管理帮助中小企业快速化实现互联网技术全流程解决方案。
?????????
?????????
本文版权归作者所有
?
原文:https://blog.51cto.com/u_14672305/3245134