標籤:
眾所周知,C#是Microsoft推出的.NET語言,只能在.NET平台上運行,例如Win 9x、ME、NT、2000、XP和Win CE之類的作業系統。但是,現在卻有了一個叫做Mono的項目,它的目標就是把.NET及其程式設計語言移植到非Windows的平台上。現在,C#是唯一被移植到非Windows平台的.NET語言。
在任何一個平台(作業系統+硬體體系)上,編寫和運行程式的三個最根本的需求是庫、編譯器/解譯器、運行環境。庫以類和方法(函數)的形式提供常用的常式,簡化大型程式的編寫。.NET架構也不例外,包含了許多類庫。另外,把程式轉換成可執行形式以及運行執行檔案時,編譯器和運行環境是必不可少的。Mono軟體包包含了.NET類庫的一部分、一個C#編譯器和.NET運行環境CLR(Common Language Runtime,通用語言執行平台環境)。
Mono聲稱支援Linux、Solaris、Free BSD和MS Windows;除了Intel x86系列的CPU(486,各類Pentium等)之外,據說還要支援Sparc、PowerPC和StrongArm處理器。
下面就來看看如何在Linux上運行Mono。
命令列應用
先從Mono首頁(http://www.go-mono.com/)下載軟體,執行下面的命令安裝所有RPM:
rpm -ivh *.rpm
安裝完成後,所有基本的動態執行庫,包括System.Data.dll、System.dll、System.Drawing.dll、System.Web.dll和System.Xml.dll都被複製到/usr/lib下。接下來,在Linux文字編輯器中輸入下面的內容,把檔案儲存為HelloMono.cs:
class HelloMono
{
public static void Main(string[ ] args)
{ System.Console.WriteLine("Hello Mono");
}
}
執行下面的命令編譯C#檔案:
mcs HelloMono.cs
mcs是Mono的C#命令列編譯器。與MS .NET SDK的csc編譯器相似,mcs也有很多命令列選項。上面的命令將產生可執行檔HelloMono.exe。注意這個執行檔案不是Linux執行檔案,而是一個.NET執行檔案,或者說,這個檔案的可執行代碼形式是中繼語言(IL,Intermediate Language)。要運行這個執行檔案,必須執行如下命令:
mono HelloMono.exe
Linux控制台上將顯示出"Hello Mono"。關於mcs和Mono的更多說明,請執行man mcs或man mono參考其man文檔。
GUI應用
Mono不支援Windows Forms,但在C#編程中可用GTK #編寫GUI。GTK #是GTK+圖形庫的C#支援工具,可從http://gtk-sharp.sourceforge.Net/下載。下載完成後,先要安裝RPM:
rpm -Uvh *.rpm --nodeps
解開gtk-sharp-0.2.1.tar.gz:
tar -zxvf gtk-sharp-0.2.1.tar.gz
進入子目錄gtk-sharp-0.2.1,執行:
./configure --prefix=/usr
make
make install
完成這一步驟之後,重新啟動一次。與GTK#有關的所有動態代碼模組(gtk-sharp.dll、atk-sharp.dll、gdk-sharp.dll、glib-sharp.dll以及pango-sharp.dll)都會被複製到/usr/lib目錄,編譯用GTK#製作GUI的C#程式時,必須通過-r參數引用它們。GTK#下載包中包含了幾個樣本程式,如HelloWorld.cs、Menu.cs、ButtonApp.cs等。編譯這些檔案的命令如下:
mcs -r gtk-sharp -r glib-sharp HelloWorld.cs
mcs -r gtk-sharp -r glib-sharp -r System.Drawing Menu.cs
mcs -r gtk-sharp -r glib-sharp -r System.Drawing ButtonApp.cs
下面來看看如何通過-r選項引用前面各個.dll動態模組。執行startx命令啟動X Window,進入終端視窗,再進入樣本程式所在目錄,執行下面的命令分別運行各個程式:
mono HelloWorld.exe
mono Menu.exe
mono ButtonApp.exe
Mono項目還在完善和發展之中,還沒有移植好全部.NET類。但不管怎樣,它對許多人來說將是一個好訊息。有關Mono C#類庫移植進展的資訊,請訪問www.go-mono.com/class-status.html。
考慮一個典型的伺服器/客戶機式.NET應用:終端使用者只與用戶端打交道,用戶端最好是方便的GUI應用,許多人還會希望使用熟悉的Windows平台。但是,對於他們來說,伺服器端使用Windows還是Linux完全無關。所以,伺服器端可以用帶有Mono的Linux構造,節省了配備專用Windows伺服器的投資。Mono也將為應用遷移帶來方便。如果Mono能夠順利發展,Windows開發人員也將能夠為Linux或其他非Windows平台開發應用。如果這樣的話,不久之後出現一個類似Visual Studio .NET但免費或廉價的Linux開發IDE也說不定。
然而,所有這一切是否能夠成為現實,依賴於Mono是否能夠茁壯發展,也依賴於Mono與Windows平台上的.NET架構相容或相似程度。另外一些因素也很關鍵,例如Mono的效能、GUI的友好程度等。
在Linux上運行C#