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