文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Aseembly中Load, LoadFrom, LoadFile以及AppDomain中相应函数的区别

Aseembly中Load, LoadFrom, LoadFile以及AppDomain中相应函数的区别

时间:2011-05-04  来源:_Mgen

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

这些函数大致可以分为四类:

第一类:加载到Load Context内

属于这一类的函数有

Assembly和AppDomain类:Load(Assembly) Load(string) 函数

这是所有动态加载程序集时最好要使用的Context。

进行一个小测试

1              string assName = "mbody"; //这是程序集名称,不是路径
2 string pLocal = Path.Combine(Environment.CurrentDirectory, "mbody.dll"); //这是路径
3
4 var load = Assembly.Load(assName); //用程序及名称加载
5 var load2 = Assembly.Load(new AssemblyName() { CodeBase = pLocal }); //用路径
6 Console.WriteLine(load == load2); //True

.

第二类:加载到LoadFrom Context内

属于这一类的函数有

Assembly类:LoadFrom函数

AppDomain类:CreateInstanceFrom, ExecuteAssembly函数

这里不可以指定程序集版本或其他信息,并且如果在LoadFrom Context内已经有一个具有相同程序集名称(即使程序集路径不一样),仍然会返回那个已经加载的程序集。

LoadFrom Context主要用在当一个程序集不再AppDomain信息中的ApplicationBase目录以及附带的PrivateBinPath目录内(关于这两个目录:可以参考我的另一篇文章:http://www.cnblogs.com/mgen/archive/2011/05/02/2034371.html)

小测试

 1             //这几个文件都是同一个程序集
2 string pLocal = Path.Combine(Environment.CurrentDirectory, "mbody.dll");
3
4 var load = Assembly.Load("mbody");
5 var loadFromloc = Assembly.LoadFrom(pLocal);
6 var loadFrom = Assembly.LoadFrom("c:\\mbody.dll");
7 var loadFrom2 = Assembly.LoadFrom("C:\\mbody2.dll");
8
9 Console.WriteLine(load == loadFromloc);
10 Console.WriteLine(loadFrom == loadFrom2);
11 Console.WriteLine(load == loadFrom);
12 //(load == loadFromLoc) != (loadFrom == loadFrom2)

.

第三类:反射Context

属于这一类的函数有:

Assembly类:ReflectionOnlyLoad, ReflectionOnlyLoadFrom函数

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

.

第四类:不属于任何Context

属于这一类的函数有:

Assembly类:LoadFile, Load(byte[])

测试

 1             //这几个文件都是同一个程序集
2 string pLocal = Path.Combine(Environment.CurrentDirectory, "mbody.dll");
3
4 var load = Assembly.Load("mbody");
5 var loadFileloc = Assembly.LoadFrom(pLocal);
6 var loadFile = Assembly.LoadFile("c:\\mbody.dll");
7 var loadFile2 = Assembly.LoadFile("C:\\mbody2.dll");
8
9 doo(load, loadFileloc, loadFile, loadFile2);
10 Console.WriteLine(load == loadFileloc);
11 Console.WriteLine(loadFile == loadFile2);
12 Console.WriteLine(load == loadFile);
13 //(load == loadFromLoc) != (loadFrom != loadFrom2)

.

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载