在Linux上執行ASP.NET vNext
最新的ASP.NET vNext完全開源且可以跨多個平臺執行,在Windows環境下我嘗試了下,幾乎沒花什麼工夫就跑起了Sample,而在Linux環境下則要多花了不少時間,所以特別記錄下整個過程,希望對其他想要嚐鮮的人有所幫助。
執行環境
Ubuntu Server 14.04
VirtualBox
Mono >= 3.4.1
*由於Ubuntu庫中的Mono版本比較陳舊,滿足不了最低要求,所以第一步要做的就是安裝最新版本的Mono。
安裝Mono
1. 首先從GitHub上取得mono程式碼:git clone git://github.com/mono/mono.git
*未安裝過git程式的話,你首先需要在Ubuntu中執行sudo apt-get install git
2. 這一步有點奇怪,編譯新版本的mono需要舊版本的支援,如果未安裝過mono的話,請先在Ubuntu執行sudo apt-get install mono-complete
命令。
3. 進入mono目錄,編譯程式:
cd mono
./autogen.sh --prefix=/usr/local
make
*這裡可能需要預先安裝其它的程式,比如autoconf,libtool,g++,make等等。
4. 安裝:make install
5. 執行mozroots --import --sync
命令以避免認證問題。
6. 通過mono –version
命令確認所安裝的mono是最新的版本。
安裝KRE
只需要簡單的一句命令:
curl https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh && source ~/.kre/kvm/kvm.sh && kvm upgrade
kvm upgrade
命令會自動下載最新的KRE包, 將其解壓到.kre/packages目錄下並新增bin資料夾路徑至你的環境變數PATH中。
*因為涉及解壓的操作,所以unzip程式必須預先安裝:sudo apt-get install unzip
安裝完成後可以通過kpm –version
命令檢查是否安裝正確。
Hello World
完成所有準備工作之後,即可以嘗試執行第一個程式了。按照傳統,第一個程式應該是“Hello World!”
1. 首先建立HelloWorld資料夾:mkdir HelloWorld
2. 進入資料夾後:cd HelloWorld
,再建立兩個檔案Program.cs和project.json。
3. 編輯這兩個檔案(推薦使用vim),在Program.cs加入以下程式碼:
using System; public class Program { public static void Main() { Console.WriteLine("Hello World!"); } }
而在project.json檔案中加入下列配置:
{ "dependencies": { "System.Console": "4.0.0.0" }, "configurations": { "net45": {}, "k10": {} } }
4. 執行kpm restore -s https://www.myget.org/F/aspnetvnext/
命令。
*該命令會根據配置檔案中的描述,從指定nuget倉庫中取得必要的依賴項。
5. 執行程式:k run
以上步驟都正確的話,應該就能在shell中看到“Hello World!”的顯示。
簡單的MVC
接著試一個較複雜的程式,程式碼可以直接從GitHub中取得。
git clone git://github.com/aspnet/Home.git
取得HelloMvc程式碼並不能直接使用,因為其指定的Web伺服器在Linux中並不存在,我們還需要新增一個工程用於生成Web伺服器。
然後修改HelloMvc的project.json檔案:
{ "version": "0.1-alpha-*", "dependencies": { "Microsoft.AspNet.Mvc": "0.1-alpha-*", "Nowin.vNext": "" }, "commands": { "web": "Microsoft.AspNet.Hosting --server Nowin.vNext" }, "configurations": { "net45": { "dependencies": { "System.Runtime": "", "System.ComponentModel.DataAnnotations": "" } }, "k10": {} } }
這樣執行kpm restore
命令下載依賴項後,執行k web
命令,就可以在瀏覽器中檢視網頁了。
*其實以上執行時還是會有錯誤,需要把Startup.cs檔案中的app.UseErrorPage();
與app.UseWelcomePage();
語句註釋掉才行。猜測是Nowin.vNext伺服器中未實現所產生的問題。
客戶端訪問
因為在這個試驗中所用的Ubuntu Server未安裝桌面環境,所以也就不能在虛擬機器中檢視以上的結果。不過既然虛擬機器已然成了服務端,不妨就把宿主機當成客戶端吧。
在VirtualBox的網路設定中將連線方式改成橋接網絡卡,這樣宿主機就可以通過IP地址訪問虛擬機器。
上一例子的Web伺服器埠號為8080,所以在宿主機的瀏覽器上輸入“虛擬機器ip地址:8080”並輕擊回車後也就能看到最終的成果了。