.NET框架源码解析

SSCLI编译过程简介

2015-05-01  本文已影响68人  懿民

前文演示了编译SSCLI最简便的方法(在Windows下):

  1. 在“Visual Studio 2005 Command Prompt”下,进入SSCLI的根目录;
  2. 运行 env.bat 脚本准备环境;
  3. 运行 buildall.cmd 脚本开始编译过程。

env.bat设置了当前SSCLI的运行环境,命令的语法是:env [option],其中[option]可以是 debugcheckedfree ,各个环境选项说明如下表:

设定好运行环境后,buildall.cmd的编译过程可以分为下面几大步骤:

  1. 编译基本的引导工具集:平台抽象层(PAL)和非托管程序(unmanaged)编译工具;
  2. 编译辅助的引导工具集:剩余的工具集和相关基础架构;
  3. 编译CLR内核、基本类库,C#编译器和其他支持工具;
  4. 编译其它.NET类库和支持工具
  5. 编译其它托管程序的编译器,如JS编译器。

其实.NET天生就是跨平台的,SSCLI 2.0除了支持Windows平台,还支持FreeBSD和Mac OS X,源码可以在FreeBSD 4.8和Mac OS X 10.2下编译通过,通过修改一些源码,还可以在Linux平台下编译和使用,实际上SSCLI 1.1通过一些修改可以在Red Hat 8.0下编译通过。

为了在后文说明方便,这里用SSCLI内置的几个环境变量来指代将会提到的文件夹路径:

基本引导工具集

SSCLI的源码由C++、C#这些非托管和托管编程语言组成,而且SSCLI是跨平台的,因此在编译过程中编译系统会用操作系统上安装的C++编译器编译好编译SSCLI剩余源码的工具集。在这一步编译过程中,基本引导工具集包括下面这些组件:

辅助引导工具集

辅助引导工具集与前面基本引导工具集的区别是,辅助引导工具集用的是SSCLI编译系统自带的build.exe编译的,源文件列表等编译规则是保存在sources.lst文件里的,而基本引导工具集是用make命令编译,而且源文件列表等编译规则是保存在makefile文件夹里的。

辅助引导工具集包括下列这些组件:

编译CLR内核、基本类库,C#编译器和其他支持工具

引导工具集编译完成后,就可以开始编译整个CLR、.NET基本类库、C#编译器等工具了,各工具的源码位置、输出路径如下表所示:

其它.NET类库和支持工具

这里面提供了一些除基本类库以外的少量类库源码:

其它托管程序的编译器

SSCLI里面还附带了一个使用C#语言开发的Microsoft Jscript编译器实现,而这个编译器本身就能编译托管程序,其源码路经是:%ROTOR_DIR%\jscript

上一篇 下一篇

猜你喜欢

热点阅读