Shared Source CLI 2.0 (Rotor) 源码研究1 Building Rotor

Introduction
Shared Source CLI 2.0 (开发代号Rotor) 是微软.NET Framework 2.0的Shared Source实现版本。Shared Source是微软推出的源代码共享计划,可以在一定限制的情况下获得/使用源代码,详情可以参考Microsoft Shared Source Initiative主页:http://www.microsoft.com/resources/sharedsource/。Rotor的代码可以在非商业行为的前提下可以自由修改和发布,只需保留License声明即可。Rotor包含了下面的内容:

1.       CLI的运行时(CLR)的符合ECMA标准的实现
2.       C# & Jscript编译器
3.       .NET Framework中的部分工具,如ilasm, ildasm, cordbg, gacutil, sn等
4.       Build工具,如Build, Binplace, NMake等
5.       PAL (Platform Adaptation Layer),支持其他平台
6.       自动化回归测试
7.       Samples
由此可见,Rotor是研究.NET Framework实现的最佳材料。
Rotor的全部源代码可以在微软的MSDN网站上下载: http://msdn.microsoft.com/net/sscli/
下载后解压缩,可以看到如下的目录结构:

目录
内容
Binaries.x86*.rotor
Build出来的可执行文件和Symbols。这个目录在Build之后才会出现
clr
CLI和BCL(Base Class Library)的实现
csharp
C#编译器的实现就在这里了
Docs
文档
Env
Build时所需的一些文件
Fx
类库的实现
Jscript
Jscript编译器的实现
Pal
Platform Adaptation Layer的实现。PAL是Rotor对Windows和Unix的一些基本API的封装
Palrt
Platform Adaptive Layer Runtime的实现。PAL中的和操作系统平台无关可重用的部分
prebuilt
存放着build所需的一些事先用工具生成好的文件
Samples
Samples
Tests
Regression Test Suite
Tools
Build工具,包括binplace, build, cppmunge等
Vscommon
公共头文件,主要是微软内部使用的一些产品有关的公用的宏定义

总共大概有150MB左右。
Build之前的准备
要Build Rotor,首先必须安装Perl。常用的Perl版本有ActiveState Perl和官方Perl。微软.NET Team使用的便是ActiveState Perl,可以在这里下载: http://www.activestate.com/Products/ActivePerl/,直接安装一路Next即可。
此外,在Build Rotor之前,还有一个准备步骤,这个问题只要是中国人一般就会遇到的 由于Rotor中部分源代码以ANSI字符存放,其中中含有在936 Code Page,也就是Simplified Chinese GBK扩展字符集下无法解析的字符,在Build的时候VC编译器CL会报warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss。同时在Build的时候由于打开了/WX开关,任何warning都会被当作是error而直接导致Build Fail。解决方法有二:
  1. 把全部有问题的源代码转换成Unicode
  2. 更改系统当前的Locale,改成英文
因为手头没有合适的工具,还是改系统的Locale最合适。在Regional And Language Options的Advance页中修改Language for non-Unicode programs的选项为English (United States) ,重启即可。
Build
准备工作做完之后,打开Command Prompt,进入到Rotor所在的目录,键入:
env debug
这条命令会设置Build所需的各种环境变量。后面跟的参数代表Build的Configuration,如下:

参数
意义
Debug
Debug版本
checked
Debug版本,带有调试信息,但优化是打开的,速度比debug快
Free
Free版本,也就是通常所说的Release,速度最快,无调试信息

既然是要研究Rotor的源代码,当然我们应该选用Debug版本了。
env.bat会直接调用env.win.bat,env.win.bat则会调用env.core.pl。env.core.pl是unix/linux/windows下面所共用的环境设置Perl脚本。
设置完环境之后,键入:
buildall
buildall首先会build所需的工具,如Build,BinPlace等,然后再调用生成的Build.exe来遍历目录调用NMAKE来Build。对build有兴趣的朋友可以参考sscli20/docs/buildtools/buildutility.html中的内容。
等待大概10分钟到半小时的样子,Rotor就build完毕了,最后生成的可执行文件在binaries.x86dbg.rotor目录下。假如Build出错了话,可以参考目录下的build*.log/.err/.wrn文件。根据Build是Debug/Checked/Free版本,对应的文件名也稍有不同。
Hello World!
Build完毕之后进入sscli20/binaries.x86dbg.rotor,键入:
csc ../samples/hello/hello.cs
调用CSC编译器(C#编译器)编译Samples中的hello.cs生成hello.exe。
之后,调用Managed Application Loader运行hello.exe:
clix hello.exe
结果自然是:
Hello World!
 
源码简介:Microsoft 发布了 sscli 2.0,所谓的 sscli 就是 Shared Source CLI。基本上是 .NET Framework 2.0Microsoft 实现,当然是实际发布的 .NET Framework 2.0 的一个简化版本。 sscli 2.0 中包含很多有趣的东西,包括: 01、vm - 包含了 CLI 核心实现,包括垃圾收集器、类装入器、类型系统、错误报告系统、应用程序域、配件、代理支持、反射、安全性和代码管理器。 02、csharp - 包含了使用 C++ 编写的 C# 编译器(csc.exe)和配件连接器。 03、classlibnative - 包含了公共类型和国际化例程。 04、ipcman - 包含跨进程通讯系统的源代码。 05、managedlibraries - 包含Remoting 和 SoapSerializer 的源代码。 06、utilcode - 包含被运行时、工具和 C# 编译器使用的核心例程,例如路径处理和分析、数组和散列表管理、C 运行库、字符大小写支持、库和配件载入、调试和日志支持、同步机制,还包括字符串格式化、GUID创建、错误处理、注册表以及配置访问等。 07、md - 包含元数据的读取器和编写器。 08、fjit - 包含 sscli JIT 编译器和验证器。 09、fusion - 包含配件绑定、策略检查和全局配件缓存的实现代码。 10、bcl - 包含 ECMA 基础类库的 C# 代码,包括大部分 System 名字空间下的代码。 11、debug - 包含运行时调试器的源代码。 12、ilasm - 包含 CIL 汇编器的源代码。 13、ildasm - 包含 CIL 反汇编器的源代码。 14、tools - 包含 PEVerify、clix.exe、metainfo.exe、托管调试器符号的读写器以及其它工具的源代码。 15、toolbox - 包含 caspol、strike 等其它工具的源代码。 16、dlls - 包含在构建过程中所需要的本机共享库。 17、xmlparser - 包含 XML 分析器的源代码。 18、fx - 包含主要名字空间中类的实现,包括正则表达式、XML和网络等。 19、jscript - 包含了使用 C# 编写的 JScript 编译器。 20、pal - 包含了平台适配层(PAL)的实现,包括 unix 和 win32 两个平台。 21、palrt - 包含 PAL 运行时的实现。 22、samples - 示例。 23、tests - 大量的测试用例和套件。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值