準備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」這個文件夾,在編譯的時候,須要用到裏面的頭文件和庫文件。
相關文章
相關標籤/搜索