准备CLR源码阅读环境

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

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

  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而直接致使部分编译失败。解决方法有:ui

  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#文件,以下表:debug

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

注意code

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