隨著.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