您的位置:首页 > 其它

将托管模块组合成程序集

2009-06-06 15:05 113 查看
CLR不是直接与托管模块打交道, 而是和程序集(assembly)打交道. 一个程序集是一个抽象的概念, 开始的时候很难掌握. 首先, 一个程序集是一个或多个托管模块或者资源文件的逻辑上的组合. 第二, 一个程序集是重用, 安全性, 版本控制的最小单元. 依赖于你选择的编译器或工具, 你能产生单文件或者多文件的程序集. 在CLR的世界中, 一个程序集就称为一个组件(component). 下图将帮助解释什么是程序集. 在这个图中, 一些托管模块和资源(或数据)文件通过一个工具来处理. 这个工具产生一个PE32(+)文件, 它代表了文件的逻辑组合. 这个PE32(+)文件包含一个数据块, 它称为manifest, 这个manifest是另外一组metadata表, 这些表描述了组成程序集的文件, 以及和程序集有关的资源和数据文件.

默认地, 编译器实际上完成了将托管模块组合到一个程序集的工作; 也就是说, C#编译器产生的托管模块中包含着一个manifest, 这个manifest表明程序集只包含一个文件, 因此, 对于只有一个托管模块而没有资源(或数据)文件的项目来说, 程序集就是托管的模块, 你不需要额外的步骤来构建程序集. 如果你想组合一组文件到一个程序集中, 你必须使用更多的工具(例如汇编连机器, AL.exe)和它们的命令行编译选项. 一个程序集允许你分离可重用, 可部署, 可以版本控制的组件的逻辑表示和物理表示. 如何分割你的代码和资源到不同的文件完全取决于你自己. 举个例子来说, 你可以把很少使用的类型或资源放到一个单独的文件中, 并构成程序集. 这个单独的文件可以放到web上供人下载. 如果这个文件从来不需要使用, 那么它们永远都不需要被下载, 从而节约了磁盘空间以及安装的时间. 程序集允许你分割文件的部署方式, 而仍然把所有的文件作为单独的集合体. 一个程序集模块也包含着关于被引用的程序集的信息(包括它们的版本号). 这个信息使得一个程序集是自我描述的(self-describing). 换句话说, CLR能确定程序集的依赖的信息, 而不需要从注册表或者微软活动目录服务中获得信息. 因为不需要额外的信息, 部署程序集比部署非托管的组件更加容易.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: