我们可以使用任何支持CLR的编程语言来创建源代码文件。然后使用相应的编译器来做语法检查和源代码分析。但是不管使用的是何种编译器,最后生成的结果都是一个托管模块(Managed Module)。托管模块是一个需要CLR才能执行的标准WindowsPE(Portable executable,简称PE)文件。
下表描述了一个托管模块的各个组成部分
组成部分 | 描述 |
PE表头 | 标准的Windows PE文件表头,类似于通用对象文件格式(Common Object File Format,简称COFF)表头。该表头指出了文件的类型:GUI(图像用户界面),CUI(控制台用户界面),或者DLL(译注:DLL在以前表示Windows中的动态链接库文件,即Dynamic Link Library,它是以动态链接的方式提供的一组函数库。在.net平台中,由于和传统的动态链接库文件有着相同的扩展名.dll,所以DLL文件的名称被沿用了下来,但其含义已经有所改变。.NET中的DLL特指程序集文件的一种形式)另外该表头还包括一个时间标记用于表示文件创建的时间。对于仅包含IL代码的模块,该表头的大多数信息会被忽略。对于包含有本地CPU代码的模块,该表头还会包含有关本地CPU代码的一些信息。 |
CLR表头 | 包含标识托管模块的一些信息(可以被CLR或者一些实用工具解析)。这些信息包括托管模块所需要的CLR版本号,一些标记,托管模块入口点方法(Main方法)的MethodRef元数据标记,以及有关托管模块的元数据、资源、强命名、标记和其他一些意义不是太大的信息的位置和尺寸 |
元数据 | 每个托管模块都包含一些源数据表。元数据表主要分两种,一种用于描述源代码中定义的类型和成员,一种用于描述源代码中引用的类型和成员 |
中间语言(IL)代码 | 编译器在编译源代码时产生的指令。CLR在运行时会将IL代码编译成本地CPU指令 |
大多数早先的编译器产生的代码都是面向特定CPU的体系的。