在Ubuntu下搭建ASP.NET 5開發(fā)環(huán)境
0×00 寫在前面的廢話
年底這段時(shí)間實(shí)在太忙了,各種事情都湊在這個(gè)時(shí)候,沒時(shí)間去學(xué)習(xí)自己感興趣的東西,所以博客也好就沒寫了。最近工作上有個(gè)小功能要做成Web應(yīng)用, 之前曾經(jīng)有過類似需求,當(dāng)時(shí)用的是WCF做WebAPI,前端用ExtJS。這次需求不關(guān)鍵,只要能解決問題就好,具體用什么技術(shù)無所謂,正好趕上 ASP.NET 5發(fā)布,所以打算嘗試一下。在Windows下借助強(qiáng)大的VS一路安裝就解決問題了,不過ASP.NET5跨平臺(tái)啊,決定試一下在Linux下部署開發(fā)環(huán) 境,以后再忽悠別人入坑也更有說服力。之前一直用Windows,只是出于好奇裝過Linux,所以對(duì)Linux不是很熟系,邊查邊做,期間自然是各種 坑,折騰了一天多,不過***也算跑起來了,在這里記錄一下踩到的坑和解決的以及未解決的問題。
0×01 Windows和Ubuntu雙系統(tǒng)
之前都使用虛擬機(jī)裝Linux的,這次既然要測(cè)試就認(rèn)真一點(diǎn)吧,從硬盤中劃出了100G的空間,參照網(wǎng)上的教程裝了Ubuntu雙系統(tǒng)。不過這個(gè)不是本文的重點(diǎn),而且很容易就能搜到大量教程,具體就不說了。我參考的這篇文章:
http://www.linuxidc.com/Linux/2012-05/59663.htm
0×02 安裝ASP.NET 5開發(fā)環(huán)境
下面重點(diǎn)開始了,主要步驟參照的微軟的官方文檔:
https://docs.asp.net/en/latest/getting-started/installing-on-linux.html
首先說明一下踩到的***個(gè)坑,因?yàn)楹芏嗝疃夹枰玫絪udo,所以我干脆sudo bash把終端切換到了root,造成的后果就是后面建立的有些文件夾都是root的,導(dǎo)致后來在非root下用yo創(chuàng)建項(xiàng)目的時(shí)候出現(xiàn)權(quán)限錯(cuò)誤,花了很 多時(shí)間才找到問題。所以為了少出現(xiàn)不必要的麻煩下面操作時(shí)建議大家還是老老實(shí)實(shí)用sudo。下面截圖中可以看到我還是用的root,大家不要這樣。
1 安裝DNVM
首先準(zhǔn)備開發(fā)環(huán)境搭建用到的工具。一般來說很可能系統(tǒng)自帶了,不過以防萬一還是運(yùn)行一下,反正也很快:
sudo apt-get install unzip curl
這個(gè)命令會(huì)安裝unzip和curl兩個(gè)工具,用于解壓和下載
什么是DNVM、DNX可以參照@張善友 的這篇文章http://www.cnblogs.com/shanyou/p/4589930.html 寫的很全面
然后下載DNVM。官網(wǎng)文檔給出了以下命令:
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
這里就用到剛剛準(zhǔn)備好的curl了,不過一般系統(tǒng)都自帶了。
按照系統(tǒng)提示在下載完后執(zhí)行命令
source ~/.dnx/dnvm/dnvm.sh
這樣DNVM就安裝完成了。可以輸入dnvm看是否安裝成功。
2 使用DNVM安裝DNX
首先還是需要準(zhǔn)備安裝中用到的工具
sudo apt-get install libunwind8 gettext libssl-dev libcurl4-openssl-dev zlib1g libicu-dev uuid-dev
然后用DNVM安裝DNX for.NET Core
dnvm upgrade -r coreclr
然后使用DNVM安裝DNX for Mono
dnvm upgrade -r mono
安裝時(shí)提示我的系統(tǒng)里沒有Mono,需要安裝。參照官網(wǎng)文檔給出的鏈接,依次執(zhí)行以下命令:
apt-key adv --keyserver keyserver.ubuntu.com –recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | tee /etc/apt/sources.list.d/mono-xamarin.list
apt-get update
apt-get install Mono-Complete
3 安裝libuv
為什么要安裝這個(gè)東西呢,因?yàn)殚_發(fā)中需要運(yùn)行本地Web服務(wù)測(cè)試啊,在Windows中我們有IIS Express,可是Linux中沒有。官方推薦使用的是kestrel,而kestrel用到了libuv這個(gè)庫,所以我們需要安裝這個(gè)庫。這個(gè)庫是用 源碼編譯的方式安裝的,命令比較多,反正我是一行一行復(fù)制著完成的,基本上復(fù)制完下一條命令的時(shí)間上一條命令就執(zhí)行完成了,體驗(yàn)也算不錯(cuò):)大致的過程就 是:安裝編譯需要的工具,下載并解壓源代碼,編譯安裝,加載共享庫使新庫生效。
sudo apt-get install make automake libtool curl
curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | sudo tar zxfv - -C /usr/local/src
cd /usr/local/src/libuv-1.4.2
sudo sh autogen.sh
sudo ./configure
sudo make
sudo make install
sudo rm -rf /usr/local/src/libuv-1.4.2 && cd ~/
sudo ldconfig
至此我們已經(jīng)完成ASP.NET 5 開發(fā)環(huán)境的安裝了。這樣是不是就結(jié)束了呢?剛開始我也是這么想的,不過馬上就意識(shí)到不對(duì)了。當(dāng)我想建個(gè)測(cè)試工程的時(shí)候發(fā)現(xiàn)無法入手,在Windows上我 都是用VS新建解決方案,選擇Web,然后選擇用什么樣的模板,可是在Linux下沒有模板啊,總不能手動(dòng)一個(gè)一個(gè)文件建立吧。然后繼續(xù)看文檔找到原來還 有Your First APS.NET ***pplication on XXX系列,不過里面沒有Linux,參照Mac應(yīng)該也沒問題。
https://docs.asp.net/en/latest/tutorials/your-first-mac-aspnet.html
0×03 安裝和配置開發(fā)工具
開發(fā)工具自然是visula Studio Code,官網(wǎng)下載
https://code.visualstudio.com/
下載后解壓,直接運(yùn)行Code即可使用。
建立項(xiàng)目時(shí)的模板是通過yeoman生成的。安裝yeoman需要用npm,于是我們先安裝npm
sudo apt-get install npm
npm和nodejs是相互依賴的,安裝其中任意一個(gè)都會(huì)自動(dòng)安裝上另外一個(gè)。安裝后可以使用
npm install -g yo bower grunt-cli gulp
來安裝yeoman、bower、grunt-cli、gulp。不過問題來了,yeoman需要nodejs版本在0.12以上,而用apt- get安裝的版本只是0.10,各種折騰都升級(jí)不了,包括使用傳說中的n這個(gè)名字怪異但據(jù)說是專用于升級(jí)nodejs的工具都不行。在網(wǎng)上查來查去找到了 這邊文章:
http://my.oschina.net/tbaby/blog/412052
里面有這么一條命令:
curl --silent --location https://deb.nodesource.com/setup_0.12 | sudo bash -
打開 https://deb.nodesource.com看了下我擦原來在這里
運(yùn)行上面那條命令下載完成后還會(huì)提示
執(zhí)行這條命令
sudo apt-get install nodejs
就可以安裝***版本的nodejs了。安裝完成后已經(jīng)成了***的0.12.9
這樣再使用npm安裝yeoman等一系列工具就沒有問題了,命令如下:
npm install -g yo bower grunt-cli gulp
yeoman是裝好了,不過yeoman還不能生成針對(duì)ASP.NET的模板,這個(gè)也是需要我們安裝的。使用以下命令來安裝ASP.NET模板:
npm install -g generator-aspnet
安裝完成后我們就可以使用yeoman建立工程了。進(jìn)入我們想放置工程的目錄,運(yùn)行
yo aspnet
然后我們就看到了模板選擇界面,我們選擇WebApplication,然后會(huì)提示我們輸入應(yīng)用的名稱,我們輸入first,然后yeoman會(huì)幫我們創(chuàng)建first這個(gè)目錄,然后把項(xiàng)目文件都建立好。
使用VSCode打開first目錄會(huì)提示缺少依賴
在工程所在目錄下執(zhí)行下面命令
dnu restore
這樣就可以解決依賴的問題。如果是***次restore要下載很多東西可能會(huì)花點(diǎn)時(shí)間。
完成之后目錄結(jié)構(gòu)大概就是這樣,跟用VS創(chuàng)建的一致。代碼也會(huì)有屬性和方法的引用提示。
在工程的project.json文件中我們可以看到commands中友web這個(gè)命令,在dependency中我們也能找到相應(yīng)的依賴。使用web這個(gè)命令就能開啟kestrel服務(wù)。
在工程所在目錄下執(zhí)行
dnx web
可以開啟web服務(wù),這樣在瀏覽器中輸入localhost:5000就能看到我們的頁面了。
嘗試把HomeController中About的消息改一下。必須要重啟Web服務(wù)才能生效,這點(diǎn)不如用VS啊,VS可以直接改了保存然后F5刷新就能看效果,跟用腳本開發(fā)一樣。
比較奇怪的是把dnx切換到coreclr后輸入dnx沒有任何反映,網(wǎng)上查也沒看到問題出在哪里。有知道的請(qǐng)賜教。
0×04 寫在***的廢話
由于對(duì)Linux不是很熟悉,整個(gè)過程遇到了很多大大小小的問題,我挑了幾個(gè)比較惱人的寫了下。還有些***到會(huì)暴露智商的我都沒提,這樣才夠心機(jī)。 不過完成后對(duì)dnvm、dnx等很多概念有了更多的認(rèn)識(shí)。但讓我做ASP.NET 5開發(fā)的話我還是會(huì)選擇windows啊,畢竟親生的還有強(qiáng)大的VS。***再說一下Ubuntu的使用,之前一直使用Windows,突然換到了 Ubuntu感覺沒有想象中的那么困難,圖形界面也算比較成熟了,很多工具用Web應(yīng)用基本可以解決。開發(fā)的話JetBrains系列都可以使用,加上現(xiàn) 在還多了VSCode,只要不寫WPF感覺問題都不是很大。遇到問題了網(wǎng)上搜一下基本也都能解決,慢慢就應(yīng)該能熟練了吧。