关于Assembly的动态加载

博客介绍了Assembly的加载通常由CLR隐式进行,若想显式动态加载,有两种主要形式,即使用Assembly类的静态方法Assembly.LoadFrom和Assembly.Load。前者直接指定文件路径或URI,后者需输入全名称,且加载时基于多种策略定位Assembly,二者实际差别较大。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Assembly的加载通常是由CLR隐式进行的,CLR的原则是只有用到时才加载,也就是说很多时候在应用程序运行过程中还要进行加载Assembly的动作,如果希望显式的在可预期的时候动态加载Assembly, 可以采用以下方法:

Assembly的动态加载有两种主要形式,都是使用Assembly类的静态方法:

* Assembly.LoadFrom(FilePath|URI): 直接指定Assembly的文件路径或URI,调用Assembly Loader;

* Assembly.Load(FullQualifiedAssemblyName):需要输入Assembly的全名称(包括name, version, culture, public key token),该种加载调用Assembly resolver,并基于以下策略来定位相应的Assembly:
   1. Assembly是否有public key,如果没有直接到Probing (step 5),如果有则应用version policy
   2. 基于version policy,也就是.config文件种的assemblyBinding元素下assembly定位的信息;
   3. 如果无法通过version policy定位,则在GAC种查找;
   4. 如果无法在GAC中定位assembly,codeBase来定位,如果通过codeBase找到的文件不匹配,则失败;
   5. 如果无法通过codeBase定位,则通过probing方式来查找,如果找到的文件不匹配,则失败。
   6. 在第一步之前应该还可以在DEVPATH系统变量中查找,但一般这只是给开发者用的而不是在部署时用的,所以可以忽略不计。

以上两种方式表面上类似,但一个是调用Loader,一个调用Resolver,实际差别很大。

转载于:https://www.cnblogs.com/bbpnb/archive/2004/06/07/14008.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值