`
csstome
  • 浏览: 1549515 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Assembly中Load, LoadFrom, LoadFile以及AppDomain, Activator类中相应函数的区别

 
阅读更多

Assembly和AppDomain的一些关于动态加载程序集的函数有些令人头疼,但细细研究后还是可以将他们区分的。 这些函数大致可以分为四类:

第一类:加载到Load Context内

Load Context:

  • Load Context是所有动态加载程序集首选应该被加载到的地方。
  • 它只能加载在AppDomain信息中的ApplicationBase目录以及附带的PrivateBinPath目录内的程序集(关于这两个目录:可以参考另一篇文章:http://www.cnblogs.com/mgen/archive/2011/05/02/2034371.html

执行这个操作的方法是:


注意上面的字符串参数是程序集名称,而不是路径,程序集名称可以直接是简写的程序集名称,或是完整的名称比如(SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3)(不带括号)

间接调用上面方法的其他方法有:


测试代码:

第二类:加载到LoadFrom Context内

LoadFrom Context

  • 主要用来加载不在ApplicationBase目录以及附带的PrivateBinPath目录内的程序集
  • 不可以指定程序集版本或其他信息
  • 如果在LoadFrom Context中已经有一个具有相同程序集名称的程序集(即使实际程序集路径不一样),LoadFrom仍然会返回已经加载的程序集

执行这个操作的方法是:


这里的字符串参数是文件路径。

间接调用上面方法的其他方法有:


测试代码:


第三类:反射Context

反射Context

  • 这里加载的程序集不能执行,类的静态构造函数也不执行,一般用来进行反射操作。

属于这一类的方法有:


第四类:不属于任何Context

不属于任何Context

  • 用来加载LoadFrom无法加载的具有相同程序集名称但是路径不同的程序集
  • 可以是通过字节数组加载,也可能是Reflection.Emit生成的不在磁盘的程序集
  • 具有很多的限制

属于这一类的方法有:


测试代码:
更多可以参考MSDN(见备注):http://msdn.microsoft.com/zh-cn/library/1009fa28.aspx
分享到:
评论

相关推荐

    From_Tool.zip_dll_especiallygbk_load dll_tool_vb.net

    在VB.NET中,可以使用`Assembly.LoadFile`或`AppDomain.CurrentDomain.Load`等方法来实现。 4. **Tool**:这可能指的是一个工具或者实用程序,可能是作者创建的一个帮助加载DLL的辅助程序。 5. **vb.net**:这是...

    DLL的动态加载

    6. **Assembly.LoadFile**:与`LoadFrom`类似,`LoadFile`允许加载指定路径的DLL,但不创建一个独立的装入上下文,这可能会影响依赖项的解析。 在WinForm应用中,DLL动态加载可能用于扩展功能、实现插件架构或访问...

    C#常用函数和动态组件制作

    例如,Assembly.LoadFrom方法可以加载DLL文件,Type.GetType可以获取类型信息,Activator.CreateInstance可以创建对象实例。 2. 接口设计:为了确保动态加载的组件与主程序的兼容性,通常会定义公共接口,组件实现...

    C#动态加载DLL主要说明如何通过反射实现动态加载DLL

    4. `Assembly.LoadFile`与`Assembly.LoadFrom`的区别:`LoadFile`只加载DLL,不加载其依赖项;`LoadFrom`会加载整个依赖树。在实际应用中,应根据需求选择合适的方法。 5. 反射的安全性:动态加载代码可能带来安全...

    C#动态加载DLL的DEMO

    在实际项目中,你还可以考虑使用AssemblyResolve事件来处理DLL依赖问题,或者使用Assembly.LoadFile方法来加载不包含在当前应用程序域中的DLL,以避免影响其他已加载的DLL。同时,为了安全起见,对动态加载的代码...

    简单程序集加载源代码

    2. 显式加载:开发人员可以通过`System.Reflection.Assembly`类的静态方法来手动加载程序集,如`Load`, `LoadFrom`, `LoadFile`, `LoadWithPartialName`等。 三、简单程序集加载源代码示例 以下是一个简单的C#代码...

    基于WPF开发的插件式DLL动态加载源码,使用反射方式实现,可以直接当作模板使用.zip

    2. **加载DLL**:使用`Assembly.LoadFrom()`或`Assembly.LoadFile()`方法可以将找到的DLL文件加载到当前的AppDomain。这两个方法的区别在于对应用程序基目录的处理,前者相对路径是相对于调用程序,后者则需要绝对...

    反射机制实现c#插件架构

    1. **加载插件**: 使用`Assembly.LoadFrom`或`Assembly.LoadFile`方法加载包含插件的DLL文件。这将返回一个`Assembly`对象,表示已加载的程序集。 2. **查找插件类型**: 在加载的程序集中,可以使用`Assembly....

    c# 动态加载dll文件,并实现调用其中的方法(推荐)

    通过使用`Assembly`类中的`LoadFile`或`LoadFrom`方法,可以加载存储在文件系统中的程序集。通常推荐使用`LoadFile`方法,因为它提供了更多的灵活性,允许指定DLL的确切路径。 在加载了DLL之后,可以通过反射来查找...

    c# 插件框架灵活加载dll

    3. **加载Assembly**:在主应用程序中,使用`Assembly.LoadFrom()`或`Assembly.LoadFile()`方法加载包含插件的DLL文件。这样,就可以在运行时将DLL作为程序集加载到内存中。 4. **发现插件**:通过`Assembly....

Global site tag (gtag.js) - Google Analytics