Assembly:这个词用中文还不大好翻译,有的地方叫组合件,也算是表达它的意思。它比较容易和Module这个词混淆。来看书中怎么说:An assembly is a logical collection of one or more modules。这里有个词很关键,就是logical,说明assembly只是一个逻辑上的概念。它由一个或多个Module组成,其中只有一个Module含有manifest information。在程序中引用Assembly时,不需要加扩展名和路径(因为它不是文件),但调用它的最终结果是在一个文件路径(或网络地址)上找到组成它的Modules。比如,.NET系统最基础的mscorlib就是一个Assembly,这里也没加扩展名。现在,你可以往下看Module的定义,两个结合起来理解就很容易了。
Module:书中对Module的解释很到位:A CLR module is a byte stream, typically stored as a file of the local file system or on Web server. In contrast, module is physical and assembly is logical。很明显,我们通常说的文件就可以看成Module,它是物理的概念。这里文件有多种:一是不包含Manifest Information的,这种文件没法直接运行,只能被主程序调用;一种是含有Manifest,但是是Class Library,由于扩展名通常是dll,所以你可以把它看作win32的下的动态链接库,不同就是win32下的dll有入口程序DllMain,但是Class Library不含Entry Point;第三种就是我们用的最多的,含有Manifest,也定义了入口程序的exe文件。(记住,定义了Manifest的module已经升级成为assembly了)下面通过命令行看一下三种文件各是怎么生成的: