程序集与AppDomain
来源:互联网 发布:公司取名软件crsky 编辑:程序博客网 时间:2024/04/30 19:50
1.程序集就是元数据、代码或资源的逻辑组。
程序集的作用:为CLR执行的代码提供一个容器;创建一个安全入口;为类型定义提供一个容器;作为版本控制的目标;作为部署的逻辑单元。
程序集有两种分类:静态程序集和动态程序集。静态程序集就是保存在磁盘上的程序集,可以是单个或一组文件。动态程序集只存在于内存中,通过反射代码,可以直接将代码发送到内存中,再进行编译执行。
另外,程序集也可以分为:多文件程序集和单文件程序集。
2.程序集清单:即数据信息的集合,其中的信息不但描述了程序集本身,而且描述了程序集的各种组件以及组件之间的关系。清单中包含了程序集元数据,并且可以保存在可移植可执行文件中。
ILDASM.EXE可以用来检查一个程序集清单。
元数据:描述了程序集的功能、内容和引用。代码属性也是元数据。
程序集中还可以保存资源。这些资源可以直接嵌入到程序集主体中,也可以从外部链接到程序集中。
3.AppDomain:可以看作是CLR的沙箱,即由运行时宿主分割的内存空间。同CLR为将应用程序彼此隔离而使用的内存构造。也是.NET Framework提供的一个类。
AppDomain类的常用方法:
CreateDomain():这个静态方法会在当前CLR宿主进程的内存中创建一个新的AppDomain。该方法可以接受各种参数,作为新AppDomain的惟一标识。
CreateInstanceFrom():这个方法在给定的AppDomain中创建AppDomain类型的实例。如果使用new运算符,那么会在当前AppDOmain中创建实例。使用这个方法则能够在其他AppDomain中创建实例。
Load():将程序集加载到指定的AppDomain中。
Unload():卸载给定的AppDomain。注意,无法从AppDomain中移除单个程序集,只能卸载整个AppDomain。
GetAssemblies():这个方法会列出AppDomain当前加载的所有程序集。
GetData():就像CallContext那样,可以在AppDomain中存储键/值对。这个方法可以检索AppDomain的命名值。
SetData():这个方法可以设置AppDomain中的命名值。
AppDomain类的属性:
BaseDirectory:获取基目录,加载程序集时会先搜索基目录。
CurrentDomain:这个静态方法能够获取当前活动AppDomain的实例,代码在该AppDomain中运行。
Evidence:包括当前AppDomain的标识符信息。
FriendlyName:表示AppDomain的FriendlyName。大部分情况下,为可执行程序的名称。
SetupInformation:该属性类型为AppDomainSetup,其中包含了程序集绑定数据,如下载缓存信息、基目录、搜索路径等。
4.插件的原理:当第三方开发人员创建插件时,必须遵循一些预先制订的规则(接口)。在主程序中查看指定目录中的所有文件,然后列出该目录文件中的所有可用插件,并检索这个插件列表。
注:加载插件时,一般会创建一个新的AppDomain并在该AppDomain中实例化一个类型。这样,这个类型就可以识别指定目录中的插件,并加载这些插件,当搜索完成后,卸载这个临时AppDomain即可释放空间。
- 程序集与AppDomain
- 通过应用程序域AppDomain加载和卸载程序集
- 通过应用程序域AppDomain加载和卸载程序集
- 通过应用程序域AppDomain加载和卸载程序集
- 通过应用程序域AppDomain加载和卸载程序集[zz]
- 通过应用程序域AppDomain加载和卸载程序集
- 通过应用程序域AppDomain加载和卸载程序集
- C#中运用AppDomain动态加载程序集详解
- C#中运用AppDomain动态加载程序集详解
- 通过应用程序域AppDomain加载和卸载程序集
- C#中运用AppDomain动态加载程序集详解
- AppDomain浅析与实例
- AppDomain
- AppDomain
- AppDomain
- AppDomain
- AppDomain
- AppDomain
- 排序算法00:准备工作
- oracle左右连接
- COM返回值HRESULT\SCODE
- 反射与代码属性
- 图文版stagefright arch 06 -- audio playback
- 程序集与AppDomain
- linux多线程之pthread_cancel结束线程
- svn的访问方式
- 图文版stagefright arch 07 -- Audio and Video Sync
- 几种通讯协议的比较
- boost::asio译文
- 解决CAD2010卸载后重新安装时显示“已安装”问题
- windows下gvim打开文件显示乱码的解决
- 为什么用单例模式