background image

    托管模块通常包含定义表和引用表,而清单表一般给程序集使用的(下文会说到)。

    我们可以用 ILDasm.exe 来查看这些元数据。

 4、IL code。中间代码,编译器产生的面向 CLR 的代码。在运行时,CLR 将其转换为本地
CPU 指令。

二、程序集

我们把一个或者多个托管模块,资源文件

 组成一个程序集,同时,它有个专门的文件来保

 清单表元数据,这个清单包含了程序集中所有文件的名称以及程序集的版本、文化、出版

者、公开导出的类型。

一定得注意的是:虽然托管模块具有我们常见的

exe 文件形式,但 CLR 操作的对象是程序

集,而不是托管模块。

CLR 总是先加载清单文件,然后通过清单文件来获得其他文件的名

称。虽然程序集可以只包含一个托管模块文件(

exe)但是我们要以程序集为单位来进行操

作,而不是一单个托管模块(

exe)作为单位。

    ·程序集定义了可复用的类型(供其它程序集/模块 使用)

       ·程序集以版本号来标识

  

  ·程序集里包含安全相关的策略信息。

   CLR 区分单个托管模块是否是程序集的方法是:查看它是否包含清单元数据表。

不用单个托管模块而用程序集做个一个执行单位

 的好处是:

1、我们可以把不同作用的类型放在不同的文件(托管模块)中,在互联网中,可以以增量
的形式下载文件。即需要用的时候再下载该部分文件。

2、我们可以添加各种的资源、数据文件通过连接器链接到程序集中,比如 Excel 表,然后再
程序里做好读取即可。

3、我们可以用不同的语言来生成不同功能的托管模块,这样每个语言的优势就体现出来
了。

由于程序集有良好的自描述性,我们在部署(或者用户拷贝)程序集时,都非常方便。只要
直接将程序集的文件拷贝到用户的磁盘中就好了,

CLR 会通过清单文件来找到各个所需文

件。这样就避免在

win32,注册表中放置文件,照成风险了。下图为一个程序集的示例:

图:程序集示例