从技术角度上说。程序集可以由多个模块组成。实际上,模块这个术语一般用于表示一个合法的.NET二进制文件。在大多数情况下,程序集只有一个模块组成,这种情况下,程序集和实际二进制文件是一一对应的。(因此被称作单文件程序集)
单文件程序集的左右必要部分(首部信息、CIL代码、类型元数据、清单和必须的资源)都包含在一个.exe或者.dll包中。
另一方面,多文件程序集是.NET模块的集合,这些模块作为单个逻辑单元进行部署和版本化。通常,其中的一个会作为主模块,它包含程序集级别的清单,主模块的清单记录了他依赖的每一个相关模块。
根据命名习惯,多文件程序集的辅助模块的文件扩展名一般是.netmodule,但这并不是CLR的强制要求。辅助模块.netnodules也包含CIL代码和类型元数据,同时还有一个模块级别的清单,该清单值记录了该模块外部引用的程序集。
多文件程序集的另外一个有点是:允许模块由不同的.NET编程语言进行编写。
程序集并不包含特定平台的指令。相反,它包含的是独立于平台的CIL指令。当.NET运行库把一个程序集加载进内存时。CIL将会被编译成目标平台可以理解的指令。
当一个客户端程序使用定义在外部程序集的类型时,CLR只是加载外部程序集的副本。由于.NET运行库在查找被引用的程序集使,并不查询系统注册表,因此我们可以程序集和外部程序集一起放到计算机的某个位置。
时间: 2024-10-11 03:28:28