『框架设计(第2版)CLR Via C#』学习笔记(002)——将托管代码合并到程序集
声明:本文是读书笔记,大部分内容是照书抄的,作为自己学习使用,(*^__^*) 嘻嘻……
CLR其实并不和模块一起工作,相反它是和程序集一起工作的。我们所谓的程序集是一个或多个模块/资源文件的逻辑性分组。另外,程序集是最小的重用、安全性以及版本控制单元。对了,有时我们也把程序集成为“组件(component)”。
在上幅图中,一些托管模块和资源(或数据)文件准备交由一个工具处理。该工具生成单独一个PE32(+)文件来代表文件的逻辑分组。实际发生的事情是,在这个PE32(+)文件中包含一个名为“清单(manifest)”的数据块。清单是由元数据表构成的另一种集合。这些表描述了构成程序集的文件,由程序集中的文件实现的公共导出的类型,以及与程序集相关联在一起的资源或数据文件。
默认情况下,将生成的托管模块转换成一个程序集的实际工作由编译器来完成。但是,假如希望将一系列文件合并到一个程序集种,就必须掌握更多的工具(比如程序集链接器AL.exe)及其命令行选项。
程序集是一个可重用的、可保护的、可版本控制的组件的逻辑及物理表示区分开。具体如何将代码和资源划分到不同的文件中,完全取决于个人。
程序集的模块还包含与引用的程序集有关的信息(它们包括它们的版本号)。这些信息使程序集具有“自描述(self-describing)”性。换言之,CLR能判断出为了执行程序集中的代码,程序集的直接依赖对象(immediate dependency)是什么。不需要在注册表或Microsoft Active Directory目录服务中保存额外的信息。由于无需额外信息,所以相较于非托管组件,程序集部署起来容易了很多。