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
分享到:
相关推荐
在AppDomain捕获异常并处理的例子,详见blog.csdn.net/fuadam/
关于AppDomain编程的全面资料,适合中高级技术人员阅读
范例 Appdomain动态加载及数据交互范例
运行一个.NET应用程序或者运行库宿主时,OS会首先建立一个进程,然后会在进程中加载CLR(这个加载一般是通过调用_CorExeMain或者_CorBindToRuntimeEx方法来实现),在加载CLR时会创建一个默认的AppDomain,它是CLR的...
C#也提供了实现动态卸载DLL的方法,通过AppDomain来实现。AppDomain是一个独立执行应用程序的环境,当AppDomain被卸载的时候,在该环境中的所有资源也将被回收。
clrinject将C#EXE或DLL程序集注入任何其他进程的CLR运行时和AppDomain中。 然后,注入的程序集可以访问注入者进程的类的静态实例,从而影响其内部状态。 clrinject将C#EXE或DLL程序集注入任何其他进程的CLR运行时...
MEF在AppDomain中演示在AppDomain中使用MEF并允许在应用程序运行时交换MEF零件。 这是我有关此主题的博客条目的源代码:和文章:
ICOAutoFac+构造函数注入,单个类注入,一次所有类注入,接口注入 简单例子仅供学习,数据库DBscript.sql,自行修改连接 //_builder.RegisterType();//一次注册单个类 ////_builder.RegisterControllers(Assembly...
var unityConfig = System.AppDomain.CurrentDomain.BaseDirectory + @"App_Data\unity.config"; var fileMap = new ExeConfigurationFileMap() { ExeConfigFilename = unityConfig }; var configuration = ...
将dll动态库嵌入到exe当中,无需嵌入互操作类型 1、双击Resources.resx 2、添加现有文件 3、添加代码 public Form1() { //添加程序解析失败事件 ... return System.Reflection.Assembly.Load(bytes); }
目前对于 Assembly, CLR 没有提供卸载 Assembly 的方法。而 Assembly 是 驻留在 Appdomain 中,Appdomain 是可以动态卸载和创建的。
这只是关于通过 WCF 和 NamedPipes 进行跨 AppDomain 通信的概念验证。 主要项目是 PoC.AppDomainWCF.App,它承载 WCF 服务并包含 Manager 类以创建新的 AppDomains 并将程序集加载到其中。 PoC.AppDomainWCF....
.NET exe文件在asp.net中运行,并捕获来自.exe的异常。
考虑使用可热插拔模块编写应用程序时应了解的事项。
将C#EXE或DLL程序集注入其他进程的每个CLR运行时和AppDomain
或者,可在Ambit Discovery桌面应用程序以及Ambit Web应用程序中的REST Web服务中实现适用性域算法。 仅基于训练集中的数据(与模型无关)来估计适用性域。 报告适用于测试集的适用域估计。 您可以为测试集和训练...
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第三方公司... //Assembly[] asses = AppDomain.CurrentDomain.GetAssemblies();
本来是只支持D5D6,B4B5,我下载源码,改了改,加了支持B6!如有编译不过,缺lib文件,用ut打开bpk,删除lib,我的环境比较复杂!
通过始终使用YALOA可以使上述操作成为可能,它允许我们通过在字典中引用类型的“魔术字符串”来调用调用方的类中的方法,其中字符串是其键,并且类型是动态的在您的AppDomain启动期间加载。 想象下面的代码。 [ Slot...