[.NET][C#].NET走跳在Linux的人生(一)Mono

隨著.NET Core 1.0在2016年的釋出,.NET工程師有更多的機會實現.NET on Linux的需求,就像魔戒中的精靈射手奧蘭多布魯, 走出精靈據點(Rivendell)還是隨便都百步穿楊射死半獸人。

本來這次很想趕上時代的潮流用上.NET Core,但因為負責的專案在使用的Library中有幾個(system.web system.data)還沒辦法在.NET Core中得到支援, 這一次我們得用上在.NET跨平台解決方案上能與.NET Core相比較的Mono,利用Mono Runtime來讓我們的程式能轉移到Linux平台執行。

 


Mono簡介

淺淺介紹自己目前認識的Mono 

Mono是一個跨平台的開源軟體授權及框架,最早是Ximian公司在2004年發佈的.NET跨平台產品, 後來這家公司經歷Novel、Attachmate等公司的併購,最後獨立成為Xamarin公司(嗯,Xamarin.Forms), 不過2016年初由微軟公司併購。 

從支援資源來比較,.NET Framework、.NET Core是屬於微軟正統官方支持的,而Mono則是微軟下的Xamarin以及.NET基金會所支持。 

Mono包含C# Compiler、Mono runtime、.NET Framework Class Libraryu以及Mono Class Library四個主要部分,能夠跨平台運行在 Linux、OS X、Windows甚至是s390等CPU架構,另外透過與Microsoft 相同的API,不需要額外重新編譯,我們也能運行ASP.NET, ADO.NET,  Silverlight(MonoLight) and Windows.Forms應用程式。 

參考Mono Project網頁提到的相容性說明,Mono已經支援到.NET 4.5,除了WPF,WWF以及部分的WCF無法支援外, C#都能支援到6.0版。

在版權使用上,從2016/3/31起,Mono Runtime以及tool都使用MIT軟體授權,這一點與.NET Core相同,除了可以商業使用外,也允許使用進一步修改。 

 


測試Mono 

這篇我們來試試用Mono來編譯及執行C# Console程式來和世界問好。 

AP環境: Red Hat Enterprise Linux 7.3

 

有關Mono與各版本.NET Framework的相容性說明可以參考Mono project的連結

 

測試步驟: 

  • 1.安裝mono-devel 
  • 2.確認安裝版本 
  • 3.建立程式資料夾 
  • 4.建立helloworld.cs 
  • 5.使用gedit編輯程式碼 
  • 6.使用mcs編譯 
  • 7.執行helloworld.exe 

 


首先,先登入Red Hat Enterprise Linux 

1.安裝mono-devel 

yum install mono-devel

 

如果發生了No Package mono-devel available的錯誤

我們需要設定Mono Repository位置:

yum install yum-utils  
rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"  
yum-config-manager --add-repo http://download.mono-project.com/repo/centos7/

 

設定好Repository位置,我們再試一次安裝mono-devel 

yum install mono-devel -y 

 


2.確認安裝版本 

mono -V

我們安裝了5.0.1.1的版本

 


3.建立程式資料夾 

mkdir  dotnet 
cd dotnet

 


4.建立HelloWorld.cs檔案 

touch helloworld.cs

 


5.用gedit工具編輯程式碼 

gedit helloworld.cs

跳出gedit編輯器後撰寫幾行c#程式

using System;    
public class HelloWorld  
{  
static public void Main ()  
{  
Console.WriteLine ("Hello Mono World");  
}  
} 

接下來,儲存,然後關閉gedit編輯器 

 


6.mono編譯(mcs) 

mcs helloworld.cs

 

程式目錄內多了一個Helloworld.exe 

 


7.mono執行 

mono helloworld.exe 

Hello Mono World! 

 

下一篇,我們來試試把Windows環境開發的Batch Console程式(Byte code)搬過來Linux環境執行。 

 

圖片來源: http://carlcheo.com/wp-content/uploads/2014/12/which-programming-language-should-i-learn-first-infographic.png

 

 


參考: 

.NET Core與Mono比較 

Install Mono In Centos 

Getting Started (Mono-basics) 

Mono Licensing 

MIT 

Legolas wiki