在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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM