这一节先简单的讨论一下程序集以及CLR的初始化安全
虽然对应的编译器会生成托管模块,但实际上CLR不与托管模块工做,编译器除了编译还有将生成的托管模块转换为程序集的功能,微软还提供了工具AL.exe(程序集连接器)。编辑器
程序集:工具
一、是一个或者多个模块或者资源的分组,是安全性、重用、版本控制的最小单元。spa
二、程序集还有一个相似于懒加载的机制,将不经常使用的类或者资源放在一个单独的文件中,当使用时才会下载,能够节约磁盘和缩短安装时间.net
三、此外程序集还能够自描述,在CLR读取程序集时无需额外信息,由于程序集自带了关于自生的全部信息,因此更容易部署版本控制
][2]orm
编译器会经过源码生成EXE、DLL文件,但不管哪种最终都是由CLR运行,但运行CLR以前必须先安装.net Framework,判断是否安装只需检查System32目录中是否含有MSCorEE.dll文件便可,微软还提供了CLRVer.exe检查CLR的版本号工具。blog
可是并非只要安装了.net Framework就能够运行程序集,须要对应程序集特定的环境才能够运行,例如生成的64位的程序集没法再32位的环境下运行,因此在运行程序集以前须要对检查程序集的信息,可使用DumpBin.exe和CoreFlags.exe工具查看。进程
程序集的版本是由编辑器设置的,C#的编译器提供了一个/platform开关选项能够设置生成对应的不一样程序集图片
如下是对应.platform 开关生成的模块在不一样环境下的运营状况
![
因此在运行程序集以前大体作了以下几个动做:
一、先读取程序集的信息
二、建立对应环境的进程
三、加载MSCorEE.add文件并调用方法初始化程序集
四、加载程序集
五、调用入口Main方法
至此就完成的CLR的全部准备工做,接下来才是重头戏,CLR如何是如何与程序集工做,你会还了解带托管代码的多处优点