托管模块通常包含定义表和引用表,而清单表一般给程序集使用的(下文会说到)。
我们可以用 ILDasm.exe 来查看这些元数据。
4、IL code。中间代码,编译器产生的面向 CLR 的代码。在运行时,CLR 将其转换为本地
CPU 指令。
二、程序集
我们把一个或者多个托管模块,资源文件
组成一个程序集,同时,它有个专门的文件来保
存
清单表元数据,这个清单包含了程序集中所有文件的名称以及程序集的版本、文化、出版
者、公开导出的类型。
一定得注意的是:虽然托管模块具有我们常见的
exe 文件形式,但 CLR 操作的对象是程序
集,而不是托管模块。
CLR 总是先加载清单文件,然后通过清单文件来获得其他文件的名
称。虽然程序集可以只包含一个托管模块文件(
exe)但是我们要以程序集为单位来进行操
作,而不是一单个托管模块(
exe)作为单位。
·程序集定义了可复用的类型(供其它程序集/模块 使用)
·程序集以版本号来标识
·程序集里包含安全相关的策略信息。
CLR 区分单个托管模块是否是程序集的方法是:查看它是否包含清单元数据表。
不用单个托管模块而用程序集做个一个执行单位
的好处是:
1、我们可以把不同作用的类型放在不同的文件(托管模块)中,在互联网中,可以以增量
的形式下载文件。即需要用的时候再下载该部分文件。
2、我们可以添加各种的资源、数据文件通过连接器链接到程序集中,比如 Excel 表,然后再
程序里做好读取即可。
3、我们可以用不同的语言来生成不同功能的托管模块,这样每个语言的优势就体现出来
了。
由于程序集有良好的自描述性,我们在部署(或者用户拷贝)程序集时,都非常方便。只要
直接将程序集的文件拷贝到用户的磁盘中就好了,
CLR 会通过清单文件来找到各个所需文
件。这样就避免在
win32,注册表中放置文件,照成风险了。下图为一个程序集的示例:
图:程序集示例