CLR Via 第一 章 知识点整理(2)程序集和CLR的启动

时间:2024-01-16 21:52:56

这一节先简单的讨论一下程序集以及CLR的初始化

虽然对应的编译器会生成托管模块,但实际上CLR不与托管模块工作,编译器除了编译还有将生成的托管模块转换为程序集的功能,微软还提供了工具AL.exe(程序集链接器)手动生成程序集。

程序集:

1、是一个或者多个模块或者资源的分组,是安全性、重用、版本控制的最小单元。

2、程序集还有一个类似于懒加载的机制,将不常用的类或者资源放在一个单独的文件中,当使用时才会下载,可以节约磁盘和缩短安装时间

3、此外程序集还可以自描述,在CLR读取程序集时无需额外信息,因为程序集自带了关于自生的所有信息,所以更容易部署

CLR Via 第一 章 知识点整理(2)程序集和CLR的启动

编译器会通过源码生成EXE、DLL文件,但无论哪一种最终都是由CLR运行,但运行CLR之前必须先安装.net Framework,判断是否安装只需检查System32目录中是否含有MSCorEE.dll文件即可,微软还提供了CLRVer.exe检查CLR的版本号工具。

但是并不是只要安装了.net Framework就可以运行程序集,需要对应程序集特定的环境才可以运行,例如生成的64位的程序集无法再32位的环境下运行,所以在运行程序集之前需要对检查程序集的信息,可以使用DumpBin.exe和CoreFlags.exe工具查看。

程序集的版本是由编辑器设置的,C#的编译器提供了一个/platform开关选项可以设置生成对应的不同程序集

以下是对应.platform 开关生成的模块在不同环境下的运营情况
 
 CLR Via 第一 章 知识点整理(2)程序集和CLR的启动
所以在运行程序集之前大致做了如下几个动作:
1、先读取程序集的信息
2、创建对应环境的进程
3、加载MSCorEE.dll文件并调用方法初始化程序集
4、加载程序集
5、调用入口Main方法

至此就完成的CLR的所有准备工作,接下来才是重头戏,CLR如何是如何与程序集工作,你会还了解带托管代码的多处优势