2015年5月2日 星期六

Run Visual Studio Code on Mac and upgrade to DNX

前言:
距離之前在Mac上面run .NET程式還過沒多久,微軟的腳步越來越快,現在已經推出在Mac平台的編輯器了,雖然目前看來還有不少缺乏的東西,但是依照目前微軟的腳步我想應該過不了多久應該就會補上了。這樣越來越多的時間要花在追技術與新工具上了 XD

內文:
如果是之前完全沒裝過kvm的人會比較單純,畢竟之前的kvm已經用不到了,另外就是之前的kre版本在beta2與beta3經歷過一次變化,讓存放的路徑有所變化,所以對一路追的人來說,這次要把kvm相關的東西移除會比較費事些

1. 移除舊有的kvm
brew uninstall kvm
2.移除舊的執行環境
rm -rf ~/.k ~/.kre ~/.kpm

ps. .k這個目錄是beta3時的新目錄

3.安裝DNVM (其實安裝步驟跟之前安裝kvm是一樣的,不用記特別的安裝步驟是個好消息 XD)
brew tap aspen/dnvm
brew install dnvm

4.更新dnvm
dnvm upgrade
dnvm upgrade -u

ps.預設這個指令會去抓最新的stable版本的dnx,但是目前因為尚未有release的版本所以要帶上“-u”抓取unstable的版本。

2015-05-08 => 這是個已知問題,需要override DNX Feed的位置,在.bash_profile寫下後source這份文件


export DNX_FEED=https://www.nuget.org/api/v2

4.1在bashrc_profile中補上所要求的指令:
export MONO_GAC_PREFIX="/usr/local/"
source dnvm.sh

5. clone 新的demo repository
在console中輸入以下指令(要先切到預計要儲存repo的資料夾)
git clone https://github.com/aspnet/Home.git

ps.這個repo跟之前kvm時的位址是一樣的,但是裡面的檔案名稱確實已經不太一樣了,看看那一系列的dnvm的檔案

上述的作業都處理完之後就算已經把kvm清除並安裝好dnx了(還有vNext這一系列的tool與.net version manager)

6.安裝visual studio code

6.1 下載 vs code : http://go.microsoft.com/fwlink/?LinkID=534106
並安裝

6.2 接下來的指令不做不會怎樣,做了很不一樣

6.2.1 編輯使用者根目錄的.bashrc輸入以下內容
code () {
  if [[ $# = 0 ]]
  then
    open -a "Visual Studio Code"
  else
    [[ $1 = /* ]] && F="$1" || F="$PWD/${1#./}"
    open -a "Visual Studio Code" --args "$F"
  fi
}

6.2.2 你可在下載下來的sample目錄下輸入指令
code .
這樣就可以直接用指令打開visual studio code

6.3 接下來要做的事情是為了讓開發更快速

6.3.1 確保你有安裝Node.js與npm有兩種方法
6.3.1.1
brew install node
=> 我個人偏好用這個來統一管理啦~
6.3.1.2
nvm install stable
=> 2015-05-08 用這個其實也不錯,很好切版本與管理node本身

6.3.2 安裝yeoman, grunt-cli, generator-aspnet, bower
npm install -g yo grunt-cli generator-aspnet bower

安裝這些其實是因為只安裝vs code並沒有包含code template,所以需要另外安裝yeoman與generator-aspnet

6.3.3 在console或是vs code(shift+command + p)中輸入指令:
dnx restore
用這個指令來重新安裝solution所需的package,不然直接用vs code開起來後一定會看到編輯器的錯誤訊息與提示
另外,若是在vs code裡面編譯的話,會需要重新開啟專案才會讓抓不到assembly的提示訊息更新

都做完以上的動作後其實就已經把目前微軟提供在Mac的基本開發環境都裝好了,已經可以在Mac上開發.NET的應用囉~!

接下來是VS Code裡面操作的一點方便的地方

7 VS Code 的command Intellisense
shift + command + p 會跳出指令視窗輸入dnx之後可以看到啟動kestrel的指令,選擇之後就會看到另一個console被啟動起來並輸出started字樣,這就代表web server已經on起來,在server on起來之後你只需要切到browser並輸入http://localhost:5004就可以看到範例站台已經起來了
這個port的設定可以在專案根目錄的project.json裡面設定。



8.有些東西還是不work~~
若你在.cs檔案裡面有更新想要讓他反應在頁面上時只需要先把web server停下來然後再重新啟動就可以看到成果了
但若你是用dnu build嘗試去建置新的assembly時會發生錯誤,這是一個已知的Mono錯誤
Issue:https://github.com/aspnet/Home/issues/498

就等Mono Team的來修掉這個bug吧~ (−_−;)


真心好奇第一個在Mac上面開發出來的.NET應用究竟會是什麼


======2015-05-08補充======

如果使用yo的generator-aspnet來產生程式碼並且執行時會看到另兩個錯誤 XD

Case 1:
dnx的版本是用beta4,也就是目前最新的穩定版
在生完程式碼後執行
dnx restore
dnx . kestrel
可以正確的run起來,但是實際執行網站時會發生error
這個時候
export MONO_MANAGED_WATCHER=disabled

請參考:https://github.com/OmniSharp/generator-aspnet/issues/138



把上述這行加入.bash_profile後就可以正確的執行網站了,不過case2就很麻煩了...

Case 2:

dnx的版本是用beta5,也就是最新的版本(unstable)



個時候只剩下dnx restore有work了 XD

主要的原因是這個grnerator產生的模板dnx版本預設是寫beta4

其實case1的討論串中也有人點出這個問題~

感覺上應該是把dnx版本換成*符號或是直接改成beta5就可以,不過我還沒嘗試就是了