1.2 将托管模块并成程序集
CLR是和程序集一起工作的.
程序集 是一个或多个模块/资源文件的逻辑性分组,它是重用、安全性以及版本控制的最小单元,它的逻辑表示和物理表示区是分开的,根据不同的编译器或工作可以生成单文件或多文件的程序集。在CLR世界里,它相当于一个“组件”。
在程序集的模块中包含了引用程序集有关的信息,这就使程序集能够自描述(self-describing),能让CLR不需要通过注册表或Active Directory Domain Services(ADDS)就可以找到程序集的直接依赖对象(immediate dependency)并执行程序集中的代码.由于无需额外的信息,所以相对于非托管组件,程序集部署起来容易得多.
1.3 加载公共语言运行时
要使用CLR管理程序集中的代码执行,必须在目标机器上安装好.NET Framework
检查%SystemRoot%\System32目录中是否存在MSCorEE.dll就可以判断.NET Framework是否已安装.CLRVer命令,查看机器上所有CLR版本
C#编译器提供了一个/platform命令行开关选项,这个开关允许指定程序集只能在32位Windows或者64位Windows或者只能在63位的Intel Itanium机器上使用,默认选项是anycpu,,表明在任何版本的Windows都可以使用.这就要设置项目的目标平台,即打开项目的属性页,从”生成”选项卡上的”目标平台”选择选项.如图:
运行一个可执行文件时,Windows会检查这个EXE文件的头,确保当前的CPU符合要求.而Windows的64位版本提供了一个WOW64(Windows on Windows64 )允许运行32位的Windows.
Windows检查好EXE文件头,决定创建32位、64位或是WOW64进程之后,会在进程的地址空间中加载MSCorEE.dll的对应版本.进程的主线程调用MSCorEE.dll中定义的一个方法,用来初始化CLR,加载EXE程序集,然后调用其入口方法(Main),最终托管的应用程序启动并运行