-
一、从源代码文件到托管模块再到程序集
不管选择了哪种.NET语言编程,需要明白的是,尽管.NET二进制文件与非托管Windows二进制文件(*.dll或*.exe)具有相同的文件扩展名,但它们的内部却是完全不同的。具体说来,.NET语言源代码文件经过相应的编译器编译后变成.NET二进制文件,.NET二进制文件不包含特定于平台的指令,它包含的是平台无关的IL(Intermediate Language,中间语言)和类型元数据。这种必须在.NET运行时环境下执行的代码称为托管代码(managed code),这些包含托管代码的二进制单元称为托管模块(managed module)。图1清楚显示了这个流程。
图1 将源代码编译成托管模块
但是CLR(公共运行时)实际模块工作,它只和程序集(assembly)工作。程序集是一个或多个模块/资源文件的逻辑性分组。图2展示了托管模块和程序集的关系,图中一些托管模块和资源(或数据)文件准备交由一个工具处理。工具生成代表文件逻辑分组的一个PE32(+)文件(一种Windows可执行文件类型)。实际发生的事情是,这个PE32(+)文件包含一个名为清单(manifest)的数据块。清单也是元数据表的集合。这些表描述了构成程序集的文件、程序集中的文件所实现的公开导出的类型以及与程序集关联的资源或数据文件。
图2 将托管模块合并成程序集
.NET程序集及其执行(IL、元数据、托管模块、JIT)
最新推荐文章于 2022-02-03 16:11:13 发布