将源代码编译成托管模块
我们先来了解一个概念公共语言运行时(Common Language Runtime,CLR)是一个可由多种编程语言使用的“运行时”。CLR的核心功能(比如内存管理、程序集加载、安全性、异常处理和线程同步)可由面向CLR的所有语言使用。可用任意支持CLR的语言(C#、VB等)创建源代码文件,然后用对应的编译器检查语法和分析源代码,最后生成托管模块(PE32文件),托管模块包括中间语言和元数据。
中间语言(IL代码):编译器编译源代码时生成的代码,在运行时,CLR将IL编译成本机的CPU指令。
元数据:每个托管模块都包含元数据表。主要包括两种表,一种表描述源代码中定义的类型和成员,另一种描述源代码引用的类型和成员。
托管模块中包含有关引用类型、成员的全部信息。编译器直接从托管文件中读取元数据。Microsoft Visual Studio用元数据帮助我们写代码。“智能感知”(IntelliSense)技术会解析元数据,告诉我们一个类型包括哪些方法、属性、事件和字段,当我们输入某方法时还会给我们提示所包含的参数。这里只介绍一些简单的元数据作用,还有许多别的作用我也搞不懂。。。
将托管模块合并成程序集
CLR实际并不是和托管工作工作,而是和程序集工作。程序集是一个或多个模块或者资源文件逻辑性分组,它是重用、安全性以及版本控制的最小单元,可以先简单的看成我们所用的.dll或者.exe文件。在CLR世界里,程序集相当于“组件”。编译器将托管文件转换成程序集。
执行程序集代码
程序集包含数据源和IL。IL是机器语言,JIT编译器可将IL转换成本机CPU指令。
本文做为自己的学习记录,仅供大家参考,内容从CLR via C#中摘抄。