Assembly和AppDomain的一些关于动态加载程序集的函数有些令人头疼,但细细研究后还是可以将他们区分的。 这些函数大致可以分为四类:
第一类:加载到Load Context内
Load Context:
执行这个操作的方法是:
注意上面的字符串参数是程序集名称,而不是路径,程序集名称可以直接是简写的程序集名称,或是完整的名称比如(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
分享到:
相关推荐
在VB.NET中,可以使用`Assembly.LoadFile`或`AppDomain.CurrentDomain.Load`等方法来实现。 4. **Tool**:这可能指的是一个工具或者实用程序,可能是作者创建的一个帮助加载DLL的辅助程序。 5. **vb.net**:这是...
6. **Assembly.LoadFile**:与`LoadFrom`类似,`LoadFile`允许加载指定路径的DLL,但不创建一个独立的装入上下文,这可能会影响依赖项的解析。 在WinForm应用中,DLL动态加载可能用于扩展功能、实现插件架构或访问...
例如,Assembly.LoadFrom方法可以加载DLL文件,Type.GetType可以获取类型信息,Activator.CreateInstance可以创建对象实例。 2. 接口设计:为了确保动态加载的组件与主程序的兼容性,通常会定义公共接口,组件实现...
4. `Assembly.LoadFile`与`Assembly.LoadFrom`的区别:`LoadFile`只加载DLL,不加载其依赖项;`LoadFrom`会加载整个依赖树。在实际应用中,应根据需求选择合适的方法。 5. 反射的安全性:动态加载代码可能带来安全...
在实际项目中,你还可以考虑使用AssemblyResolve事件来处理DLL依赖问题,或者使用Assembly.LoadFile方法来加载不包含在当前应用程序域中的DLL,以避免影响其他已加载的DLL。同时,为了安全起见,对动态加载的代码...
2. 显式加载:开发人员可以通过`System.Reflection.Assembly`类的静态方法来手动加载程序集,如`Load`, `LoadFrom`, `LoadFile`, `LoadWithPartialName`等。 三、简单程序集加载源代码示例 以下是一个简单的C#代码...
2. **加载DLL**:使用`Assembly.LoadFrom()`或`Assembly.LoadFile()`方法可以将找到的DLL文件加载到当前的AppDomain。这两个方法的区别在于对应用程序基目录的处理,前者相对路径是相对于调用程序,后者则需要绝对...
1. **加载插件**: 使用`Assembly.LoadFrom`或`Assembly.LoadFile`方法加载包含插件的DLL文件。这将返回一个`Assembly`对象,表示已加载的程序集。 2. **查找插件类型**: 在加载的程序集中,可以使用`Assembly....
通过使用`Assembly`类中的`LoadFile`或`LoadFrom`方法,可以加载存储在文件系统中的程序集。通常推荐使用`LoadFile`方法,因为它提供了更多的灵活性,允许指定DLL的确切路径。 在加载了DLL之后,可以通过反射来查找...
3. **加载Assembly**:在主应用程序中,使用`Assembly.LoadFrom()`或`Assembly.LoadFile()`方法加载包含插件的DLL文件。这样,就可以在运行时将DLL作为程序集加载到内存中。 4. **发现插件**:通过`Assembly....