1. 程式人生 > 實用技巧 >在linux系統下執行C#編譯的exe檔案

在linux系統下執行C#編譯的exe檔案

眾所周知,C#是Microsoft推出的.NET語言,只能在.NET平臺上執行,例如Windows 9x/Me/NT/2000/XP和Windows CE之類的作業系統。但是,現在卻有了一個叫做Mono的專案,它的目標就是把.NET及其程式語言移植到非Windows的平臺上。目前,C#是惟一被移植到非Windows平臺的.NET語言。

在任何一個平臺(作業系統+硬體體系)上,編寫和執行程式的三個最根本的需求是庫、編譯器/直譯器、執行環境。庫以類和方法(函式)的形式提供常用的例程,簡化大型程式的編寫。.NET框架也不例外,包含了許多類庫。另外,把程式轉換成可執行形式,並且執行執行檔案時,編譯器和執行環境是必不可少的。Mono軟體包包含了.NET類庫的一部分、一個C#編譯器和.NET執行環境CLR(Common Language Runtime,公共語言執行時環境)。


Mono聲稱支援Linux、Solaris、FreeBSD和Windows。除了Intel x86系列的CPU(486及各類Pentium等)之外,它還要支援Sparc、PowerPC和StrongArm處理器。

下面就來看看如何在Linux上執行Mono。

命令列應用



首先從Mono主頁http://www.go-mono.com/下載軟體。然後,執行下面的命令,安裝所有RPM:

<ccid_nobr>

<ccid_code># rpm -ivh *.rpm



安裝完成後,所有基本的動態執行庫,包括System.Data.dll、System.dll、System.Drawing.dll、System.Web.dll和System.Xml.dll都被複制到/usr/lib下。接下來,在Linux文字編輯器中輸入下面的內容,把檔案儲存為HelloMono.cs:


<ccid_nobr>

<ccid_code>class HelloMono
{
public static void Main(string[ ] args)
{ System.Console.WriteLine(“Hello Mono”);
}
}



執行下面的命令編譯C#檔案:

<ccid_nobr>

<ccid_code># mcs HelloMono.cs



mcs是Mono的C#命令列編譯器。與MS .NET SDK的csc編譯器相似,mcs也有很多命令列選項。上面的命令將生成可執行檔案HelloMono.exe。注意,這個執行檔案不是Linux執行檔案,而是一個.NET執行檔案,或者說這個檔案的可執行程式碼形式是中間語言(IL,Intermediate Language)。要執行這個執行檔案,必須執行如下命令:


<ccid_nobr>

<ccid_code># 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:

<ccid_nobr>

<ccid_code># rpm -Uvh *.rpm --nodeps



解開gtk-sharp-0.2.1.tar.gz:

<ccid_nobr>

<ccid_code># tar zxvf gtk-sharp-0.2.1.tar.gz



進入子目錄gtk-sharp-0.2.1,執行:

<ccid_nobr>

<ccid_code># ./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等。編譯這些檔案的命令如下:

<ccid_nobr>

<ccid_code># 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,進入終端視窗,再進入示例程式所在目錄,執行下面的命令分別執行各個程式:

<ccid_nobr>

<ccid_code># 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的友好程度等。

參考:https://www.cnblogs.com/stray521/archive/2009/06/03/1495762.html

  https://www.mono-project.com/download/stable/#download-lin-debian