`
lovnet
  • 浏览: 6944728 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

.NET / 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脚本。

10/21/2007更新:如果在Windows上执行env.bat的时候报"Could not get platform OS version"错误,请参看这篇文章:.NET/Rotor源码研究1补遗:解决无法检测操作系统版本的错误

设置完环境之后,键入:
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!
Next
下一篇文章将研究Rotor中hello.exe的执行过程,揭示Manage代码的基本运行机制。

分享到:
评论

相关推荐

    应用Samcef/Rotor计算转子-轴承系统非线性动力学响应与稳定性

    应用Samcef/Rotor计算转子-轴承系统非线性动力学响应与稳定性,刘承前,曹树谦,应用Samcef/Rotor有限元分析软件,对两种转子-滑动轴承系统进行了非线性动力学响应和稳定性计算。通过分析计算出的分岔图、Poincaré...

    Coordinated Optimization of DFIG Rotor Crowbar and DC-chopper R

    需要注意的是,本文所提及的优化研究仅限于电力系统中的DFIG技术,而与之相混淆的区域能源网络研究则属于不同的专业领域。后者主要关注于城市区域能源规划和供热需求预测,尽管它同样关注能源效率和环境可持续性,但...

    rotor-modal-analysis_rotor_悬臂梁模态分析_轴承_模态分析_轴承分析_源码.zip

    《悬臂梁模态分析与轴承模态分析的...通过对"rotor-modal-analysis_rotor_悬臂梁模态分析_轴承_模态分析_轴承分析_源码.zip"的深入研究,我们可以更好地理解结构的动力响应,预防振动问题,提高设备的可靠性和效率。

    开发人员喜欢的网站

    **ITPub (http://www.itpub.net/)** - **内容介绍**:一个以专业技术和行业知识为主的社区,覆盖了软件开发、网络技术等多个领域。 - **特点**: - 拥有活跃的技术论坛,方便开发者交流和讨论。 - 定期发布技术...

    PNS.BAFS+361.2023_Multi-Rotor+Remotely+Piloted+Aircraft-

    "PNS.BAFS+361.2023_Multi-Rotor+Remotely+Piloted+Aircraft-" PNS/BAFS 361:2023 Multi-Rotor Remotely Piloted Aircraft-Powered Sprayer — Methods of Test 是 Philippine National Standard 中的一部分,旨在...

    sscli_Shared Source CLI 2.0 (开发代号Rotor)

    http://blog.csdn.net/atfield/article/details/1471465 Introduction Shared Source CLI 2.0 (开发代号Rotor) 是微软.NET Framework 2.0的Shared Source实现版本。Shared Source是微软推出的源代码共享计划,可以...

    rotor37_CFD_rotor37_rotor37网格划分_MeshCase_NASARotor37_

    rotor37是一个经典的风力涡轮机叶片研究案例,源自NASA(National Aeronautics and Space Administration,美国国家航空航天局)的RANS(Reynolds-Averaged Navier-Stokes,雷诺平均纳维-斯托克斯方程)研究。...

    Rubbing-Rotor---matlab-2.zip_rotor_rubbing_分岔图_离散 分岔_离散分岔

    在本资料包“Rubbing-Rotor---matlab-2.zip”中,包含了一个Matlab程序,用于绘制转子摩擦问题的一维离散时间序列的分岔图。Matlab作为一种强大的数值计算和可视化软件,是进行复杂动态系统分析的理想选择。该程序...

    制动器4disc-brake-6-piston-caliper-rotor-hat-1.snapshot.8

    标题中的“制动器4disc-brake-6-piston-caliper-rotor-hat-1.snapshot.8”指的是一款汽车制动系统的重要组成部分,这通常是一个四盘式制动器,其中包含六个活塞卡钳,以及可能的转子帽。这个名称暗示了这是一个详细...

    rotor-modal-analysis_rotor_悬臂梁模态分析_轴承_模态分析_轴承分析.zip

    综上所述,"rotor-modal-analysis_rotor_悬臂梁模态分析_轴承_模态分析_轴承分析.zip"这个压缩包文件很可能包含与上述概念相关的研究报告、计算数据、模拟结果或软件工具。通过对这些内容的深入理解和应用,工程师...

    Rotor-winding-start-resistor.rar_转子

    1. **启动过程**:在电机启动时,通过在转子电路中串联接入适当的启动电阻,可以降低启动电流。这是因为电阻会消耗一部分电能,从而减小了通过电机绕组的电流。在电机转速逐渐提升后,这些电阻会被切除,电机进入...

    开发人员一定要加入收藏夹的网站收藏

    19. **blog.csdn.net/group/experts** - CSDN专家群,集结了众多领域专家的博客和文章。 20. **codeproject.com** - 提供丰富的示例代码和深入的教程,覆盖各种编程语言和技术。 21. **gotdotnet.com** - 微软维护...

    Rotor37.rar

    标题中的"Rotor37.rar"指的是一个RAR格式的压缩文件,通常用于打包并压缩多个相关文件,便于存储和传输。RAR是一种高效的压缩算法,由尤里·扎哈罗夫开发,它提供了比ZIP更高的压缩率,并支持恢复记录,可以在文件...

    threejs-spherical-rotor:Threejs-spherical-controls的循环旋转插件

    在"threejs-spherical-rotor-master"压缩包中,包含了源代码和其他必要的文件,如示例代码、文档等,这些资源可以帮助开发者快速理解和使用这个插件。通过阅读和分析源码,我们可以深入学习如何实现这样的3D交互功能...

    .net学习网站总结

    ### 1. .NET QuickStart Guide (http://chs.gotdotnet.com/quickstart/) 此网站提供了一个快速入门指南,适合那些希望快速了解并掌握.NET框架的初学者。它包含了.NET框架的基本概念、安装指南以及如何开始编写第一个...

    Rotor-Gene_2_0_2_4.exe

    Rotor-Gene_2_0_2_4.exe

    NASA_Rotor_67_Blade_data

    "Rotor 67"可能指的是NASA在某个特定研究项目中开发或测试的第67种旋翼设计,这样的数据对于理解旋翼空气动力学特性以及优化飞行器性能至关重要。 描述中提到,这些数据是从外部网站获取的,因此使用者需要注意数据...

    软件开发人员必须的技术类网站

    #### 1. GotAPI.com - **简介**:GotAPI.com 是一个提供 HTML、CSS、XPath、XSL、JavaScript API 的查询网站。 - **特点**: - 提供详尽的 API 文档和示例代码。 - 支持多种查询方式,便于快速查找所需信息。 - ...

Global site tag (gtag.js) - Google Analytics