认识.NET平台(二)CLR公共语言运行时
一、程序集
- 程序集从上到下包含PE/COFF头、CLR头、清单、元数据、CIL代码、资源文件。
- 符合PE/COFF(windows可移植可执行/通用对象文件格式)的文件才是Windows可执行文件。Windows操作系统通过理解PE/COFF文件的格式能够加载并运行.dll和.exe。所有在windows操作系统上运行的程序都需要符合PE/COFF这个格式。PE/COFF头包含了供操作系统查看和利用的信息。
- CIL语言代码还需要在CLR环境中进行即时编译后才能给计算机直接执行。CLR头最重要的作用之一就是告诉操作系统这个PE/COFF文件是一个.NET程序集。
- 可以理解为CLR是一个软件层或者代理,它管理了.NET程序集的执行,主要包括:管理应用程序域、加载和运行程序集、安全检查、将CIL代码即时编译为机器代码、异常处理、对象析构和垃圾回收等。CLR也叫VES(虚拟执行系统),类似于java虚拟机
- 清单相当于一个目录,描述程序集本身的信息。
- 元数据描述程序集包含的内容:程序集包含的模块、类型、类型的成员、类型和类型成员的可见性。不包含类型的实现。元数据类似于C++的.h文件。查看元数据的过程就叫反射。
- CIL代码,包括方法体、字段等,类似于C++中的.cpp文件。
- 资源文件,例如.jpg文件。
二、运行程序集
- 操作系统在尝试打开一个托管程序集时,首先会检查PE头,根据PE头来创建合适的进程。
- 接下来进一步检查CLR头,如果存在,就会立即载入MsCorEE.dll。
- 加载MsCoreEE.dll之后,会调用其中的_CorExeMain()函数,该函数会加载合适版本的CLR。