注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

神殿天堂

神仙的家园

 
 
 

日志

 
 

C#反射-Assembly.Load、LoadFrom与LoadFile进阶  

2012-10-16 14:53:00|  分类: c# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

关于.NET中的反射,常用的有三个方法:

Assembly.Load()
Assembly.LoadFrom()
Assembly.LoadFile()

下面说说这三个方法的区别和一些细节问题

 

1. Assembly.Load()简介

Load()方法接收一个String或AssemblyName类型作为参数,这个参数实际上是需要加载的程序集的强名称(名称,版本,语言,公钥标记)。例如.NET 2.0中的FileIOPermission类,它的强名称是:

System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

对于弱命名的程序集,则只会有程序集名称,而不会有版本,语言和公钥标记。如 TestClassLibrary

细节

  • CLR内部普遍使用了Load()方法来加载程序集,在Load()方法的内部,CLR首先会应用这个程序集的版本绑定重定向策略,接着在GAC中查找目标程序集。如果GAC中没有找到,则会在应用程序目录和子目录中寻找(应用配置文件的codebase所指定的位置)。

  • 如果希望加载弱命名程序集,Load()方法就不会去GAC中查找。

  • 当Load()找到目标程序集时,就会加载它,并返回一个相应Assembly对象的引用。

  • 当没有找到程序集时,会抛出System.IO.FileNotFoundException异常。

  • 当存在特定CPU架构的程序集时,CLR会优先加载当前架构的程序集(例如x86版本优先于IL中立版本)

  • 如果希望强迫加载某个架构版本的程序集,需要在强名称中加以指定。ProcessorArchitecture可以为x86 IA64 AMD64MSIL,当然还有None

  • Load方法与Win32函数中的LoadLibrary方法等价

 

2. Assembly.LoadFrom()简介

LoadFrom()方法可以从指定文件中加载程序集,通过查找程序集的AssemblyRef元数据表,得知所有引用和需要的程序集,然后在内部调用Load()方法进行加载。

Assembly.LoadFrom(@"C:\ABC\Test.dll");
  评论这张
 
阅读(1)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018