微软发布了CLR 2.0的源码,这个源码是可以直接在freebsd和windows环境下编译及运行的,请在微软shared source cli(http://www.microsoft.com/en-us/download/details.aspx?id=4917)链接处下载,并用7zip等工具解压,以后简称sscli – 即Shared Source CLI。

解压后,根目录下有readfirst.html文件,里面说明了该开源版本里包含的功能列表:

  1. 泛型的实现;
  2. 轻量级的代码生成;
  3. 委托的实现;
  4. 反射;
  5. 装配件(Assembly)的元数据格式;
  6. 匿名函数和委托;
  7. .NET基本类库(BCL);

编译和运行代码

要编译clr源码的话,需要满足下面条件:

  • Microsoft Visual Studio 2005专业版以上,请使用默认安装,避免在编译的时候各种找不到文件的情况;
  • Perl。

另外,还有一个准备步骤,这个问题在中文版的Windows系统中都会遇到,由于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而直接导致部分编译失败。解决方法有:

  1. 把全部有问题的源代码转换成Unicode编码;
  2. 更改系统当前的区域设置(Locale)为英文
一般来说改系统的Locale最合适。在“控制面板”中“日期、时间、语言和区域设置”中的“区域和语言选项”的“高级”页中修改“非Unicode程序的语言”的选项为“英文(美国)” ,重启即可。
 
在编译过程中,需要将几个程序加入PATH路径,以便编译程序能找到它们:
 
  1. 将Perl的路径包含进来,如:C:\Perl\bin;

安装好上面的软件并将sscli源码解压之后,打开“Visual Studio 2005 Command Prompt”窗口,切换到sscli的根目录,下面假设根目录路径是:c:\sscli。依次执行下面的命令:

cd /d c:sscli

rem 设置当前编译和运行环境为调试环境

env debug

rem 编译所有的程序

buildall

  

编译成功之后,写一个简单的C#文件,如下表:

using System;

public class Hello
{
public static void Main()
{
Console.WriteLine("Hello, sscli");
}
}

  

在编译CLR源码的控制台运行下面的命令编译和执行C#程序(前面执行的 env debug命令,已经自动设置好PATH环境变量,C#编译器csc.exe程序指向的是我们编译好的程序):

  1. 编译:csc test.cs
  2. 运行程序:clix test.exe

注意

  1. 尽量使用英文原版的Windows XP进行编译,或者按前所述改成英文的区域设置;
  2. 不要使用VS 2005以上的IDE编译,我曾经用VS 2008编译成功过,但写这篇文章的时候又碰到很多编译错误,为了省事的话,尽量用VS 2005编译;
  3. 需要确认VS 2005安装好以后,有“C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK”这个文件夹,在编译的时候,需要用到里面的头文件和库文件。

准备CLR源码阅读环境的更多相关文章

  1. .NET框架源码解读之准备CLR源码阅读环境

    微软发布了CLR 2.0的源码,这个源码是可以直接在freebsd和windows环境下编译及运行的,请在微软shared source cli(http://www.microsoft.com/en ...

  2. Mac搭建Hadoop源码阅读环境

    1.本次Hadoop源码阅读环境使用的阅读工具是idea,Hadoop版本是2.7.3.需要安装的工具包括idea.jdk.maven.protobuf等 2.jdk,使用的版本是1.8版,在jdk官 ...

  3. 基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建

    基于Eclipse IDE的Ardupilot飞控源码阅读环境搭建 作者:Awesome 日期:2017-10-21 需准备的软件工具 Ardupilot飞控源码 PX4 toolchain JAVA ...

  4. 编译spark源码及塔建源码阅读环境

    编译spark源码及塔建源码阅读环境 (一),编译spark源码 1,更换maven的下载镜像: <mirrors> <!-- 阿里云仓库 --> <mirror> ...

  5. win7+idea+maven搭建spark源码阅读环境

    1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...

  6. Sping学习笔记(一)----Spring源码阅读环境的搭建

    idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...

  7. Spring源码阅读笔记01:源码阅读环境准备

    1. 写在前面 对于做Java开发的同学来说,Spring就像是一条绕不过去的路,但是大多数也只是停留在对Spring的简单使用层面上,对于其背后的原理所知不多也不愿深究,关于这个问题,我在平时的生活 ...

  8. Spring5源码阅读环境搭建-gradle构建编译

      前沿:Spring系列生态十分丰富,涉及到各个方面.但是作为Spring生态的核心基础Spring,是最重要的环节,需要理解Spring的设计原理,我们需要解读源码.   在构建Spring源码阅 ...

  9. 【Java】用IDEA搭建源码阅读环境

    用IDEA搭建源码阅读环境 参考自CodeSheep的Mac源码环境搭建, https://www.bilibili.com/video/BV1V7411U78L 但是实际上在Windows搭建的差别 ...

随机推荐

  1. DDD 主题交流会总结及计划

    思维碰撞才能更加进步 2015年5月16日(上周六),我们举行了一次 DDD 主题的交流会,参会者主要是 ENode 群友.以及部分园友,为什么要搞这次交流会?原因很简单,就是希望可以提供对 DDD ...

  2. C# PPT 为形状设置三维效果

    在PPT中,形状是非常重要的元素.3-D形状,立体多元,给人耳目一新的感觉.在幻灯片中添加3-D效果形状,必然会为PPT的整体效果增色不少.为形状设置三维格式时,可设置棱台,轮廓线,表面效果等. 本篇 ...

  3. PHP变量和数据类型

    编程语言可以分为三大类 1. 静态类型语言,比如:C/Java等,在静态语言类型中,类型的检查是在编译期(compile-time)确定的. 2. 动态语言类型,比如:PHP,python等各种脚本语 ...

  4. C语言 第四章 分支结构练习

    一.输入语文,数学成绩,根据平均分分3档 #include "stdio.h" void main() { //接受用户输入 float chinese,math,avg; pri ...

  5. SEO技巧之WordPress篇幅

    随着搜索引擎大兴, 排列在前的网站引入大量流量. 无论是搜索页面的广告还是查出来的结果, 与搜索者的目标匹配度都比较高 (如果搜索引擎足够智能), 所以通过搜索引擎而来的访客很可能会从网站上得到他想要 ...

  6. 5.Inheritance Strategy(继承策略)【EFcode-first系列】

    我们已经在code-first 约定一文中,已经知道了Code-First为每一个具体的类,创建数据表. 但是你可以自己利用继承设计领域类,面向对象的技术包含“has a”和“is a”的关系即,有什 ...

  7. C#基础知识一之base关键字

    前言 其实很早就想写关于C#基础,总是自己给自己找借口,或者去网上搜搜看看,现在想想觉得自己有点懒惰...  作为开发人员,基础知识是重中之重的,只有巩固.理解.实践才能提高自身的技能.同时也希望通过 ...

  8. node.js 的事件驱动

    events 模块只提供了一个对象: events.EventEmitter. EventEmitter 的核心就是事件发射与事件监听器功能的封装.EventEmitter 的每个事件由一个事件名和若 ...

  9. jquery 文本/html/值

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Linux实战问题解决方案(1):Could not get lock

    环境: Ubuntu12.04 问题描述: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily un ...