C#

浅谈Assembly.LoadFile与Assembly.LoadFrom的区别

在反射调用Assembly时,我们用的最多的就是Assembly.LoadFrom这个方法,从Framework 1.1开始Assembly又新增加了一个静态方法LoadFile,那么这两个方法有什么区别呢?比较MSDN中Assembly.LoadFile和Assembly.LoadFrom的描述:

Assembly.LoadFile:
Note: This namespace, class, or member is supported only in version 1.1 of the .NET Framework.
Loads the contents of an assembly file.

Assembly.LoadFrom:
Loads an assembly.

粗看起来好像没有什么区别,但实际使用时却差别很大。在我的使用经验中主要有以下区别:
1、Assembly.LoadFile只载入相应的dll文件,比如Assembly.LoadFile(“a.dll”),则载入a.dll,假如a.dll中引用了b.dll的话,b.dll并不会被载入。
Assembly.LoadFrom则不一样,它会载入dll文件及其引用的其他dll,比如上面的例子,b.dll也会被载入。
2、用Assembly.LoadFrom载入一个Assembly时,会先检查前面是否已经载入过相同名字的Assembly,比如a.dll有两个版本(版本1在目录1下,版本2放在目录2下),程序一开始时载入了版本1,当使用Assembly.LoadFrom(“2\a.dll”)载入版本2时,不能载入,而是返回版本1。
Assembly.LoadFile的话则不会做这样的检查,比如上面的例子换成Assembly.LoadFile的话,则能正确载入版本2。

反射加载文件
System.Reflection.Assembly dll = System.Reflection.Assembly.LoadFile(“文件路径”);
Stream xmls = dll.GetManifestResourceStream(“a.dll的命名空间.项目中的文件路径.文件名”);

分类: C#

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部