標籤:
0x00 前言
一周多以前的微軟的Build大會上,微軟發布了一個讓很多人眼前一亮的工具,也是本文的主角——Visual Studio Code。很多使用Windows的朋友都很高興,認為又多了一個很不錯的文檔編輯器。不過匹夫更關心的是它的跨平台能力,這不,匹夫偷得半日閑,寫篇小文來聊聊在Mac上如何使用Visual Studio Code編譯和調試C#代碼,最後匹夫也會嘗試把Visual Studio Code嵌入Unity3D中,作為一個準“IDE”使用。
0x01 Visual Studio Code是誰?
好啦,既然要聊Visual Studio Code,那我們總是要Crowdsourced Security Testing道它是何方神聖吧?
關注微軟或者微軟build大會的新聞的人,相信對它一定不陌生了。摘錄幾條當時的新聞,各位就能有個比較直觀的印象了。
新聞摘錄一:
在Build大會期間,微軟發布了 Visual Studio 開發人員工具中新的應用 —— Visual Studio Code。微軟將 Visual Studio Code 描述為“代碼最佳化編輯器”,這款工具免費向所有開發人員開放下載,並提供 Mac OS 和 Linux 版本。
新聞摘錄二:
首先明確一下,這個 Visual Studio Code(以下簡稱 vscode)是一個帶 GUI 的代碼編輯器,也就是只能完成簡單的代碼編輯功能,並不是一個整合式開發環境(IDE)
那麼不知道大家是否和匹夫最初聽到這個訊息時的感覺相同,就是微軟怎麼突然就放出了這麼一個工具呢?它不僅能跨平台而且看上去它也和傳統的Visual Studio並不相同。
不錯,Visual Studio Code其實是脫胎於一個使用JavaScript,Html和CSS並且基於io.js和Chromium的Github的開源架構——Electron。而很多人熟悉的開原始碼編輯器——Atom編輯器(為了表示區別,不和下面的Atom Shell混淆,只要提到的Atom是編輯器,則使用Atom編輯器這樣的稱呼)同樣使用了Elctron架構,匹夫之前聽過有一種說法是Visual Studio Code是基於Atom編輯器的,其實這並不準確,它們只不過都使用了Electron而已。而解開Visual Studio Code的內容後可以發現,其中的確有很多檔案冠以“Atom”這樣的名號,這又是怎麼一回事呢?其實去Electron的託管頁面就可以看到答案了,Electron之前的名字叫做Atom Shell,而Visual Studio Code中的Atom指的其實是Atom Shell(順便提一嘴,之前微軟就已經有了Visual Studio Online,那款編輯器叫做Monaco)。
雖然和Atom編輯器同樣都是基於Elctron,但是沒有人會把Visual Studio Code和Atom編輯器混為一談,因為微軟顯然也添加了自己的一些功能,比如將Roslyn以及另一個“以使開發人員能在任何平台任何編輯器都可以獲得良好的C#開發體驗”為目標的開源項目omnisharp也加入了進來。
下面我們來看一下Mac版的Visual Studio Code的內容吧。
我們可以清楚的看到Visual Studio Code使用了Atom Shell架構。
0x02 自己動手,豐衣足食
好啦,既然已經解決了Visual Studio Code是誰的這個問題,那麼下面讓我們更進一步。按照從在Mac上安裝,到自訂功能這樣的順序繼續聊聊Visual Studio Code。
安裝Visual Studio Code
安裝Visual Studio Code其實需要兩步,首先需要安裝 ASP.NET 5,之後安裝Visual Studio Code(其實先後順序並沒有關係,匹夫就是先裝的Visual Studio Code)。
如何在Mac上安裝ASP.NET 5,網上已經有很多說明了。其實也很簡單,直接使用Homebrew即可。
$ brew tap aspnet/dnx $ brew update $ brew install dnvm
之後還會有說明,是十分容易操作的。
之後安裝Visual Studio Code,我們需要去到官網https://code.visualstudio.com/下載Mac的版本。
更詳細的安裝說明可以參考此處。
自訂設定檔
OK,安裝完成之後,終於可以開始我們的visual studio code的初體驗了。
由於匹夫比較常用的一個功能就是定義跳轉,所以對定義跳轉的快速鍵十分敏感。而匹夫的Mac上F12預設給了音量大小,所對很多把F12作為定義跳轉的編輯器匹夫起初都是很排斥的(duang~~~)。不過visual studio code這種編輯器顯然會提供很方便的使用者自訂的Json配置。
那麼匹夫為了找到控制快速鍵配置的Json檔案,匹夫首先使用cmd+p這個快速鍵組合,將visual studio code的command顯示出來。
cmd+p
這裡就是所有的命令了。
之後匹夫只需要輸入key就發現了Open KeyBoard Shortcuts這個命令,執行它就開啟了預設的快速鍵配置。
其中左側便是預設的快速鍵設定,而右側則是使用者自訂的鍵位設定json檔案。這裡匹夫將定義跳轉設定成了習慣的cmd+y的組合。
匹夫舉這個例子,主要是為了說明我們可以很方便的自訂這個編輯器。那麼下面匹夫繼續和大家聊聊,如何使用visual studio code在Mac上開啟、編譯並調試一個項目。
0x03 開啟、編譯並調試一個項目
為了示範visual studio code所謂的跨平台能力,匹夫首先在Windows上產生一個項目,名字叫做ConsoleApplication2,這個項目主要用來實現一個自我介紹的功能。下面匹夫就分別從開啟、編譯和調試這三個方面來聊聊。
首先展示一下這個來自Windows的項目在Mac上的位置和內容:
開啟一個項目
要編譯這個項目,我們顯然要先在Visual studio code中匯入該項目。
我們只需要選擇File下拉式功能表中的Open即可:
此時項目已經匯入了Visual studio code中。
開啟Programe.cs檔案,我們可以看到智能感應,自動補全的功能。
項目已經匯入了,那麼下一步我們就需要對項目進行編譯了。
編譯一個項目
此時我們再次使用cmd+p這個快速鍵組合,將visual studio code的command顯示出來。這次我們輸入>configure task runner。開啟tasks.json檔案,配置任務。
cmd+p>configure task runner
將預設的任務修改成如下內容:
"version": "0.1.0","command": "xbuild","args": ["ConsoleApplication2.sln"]
即編譯ConsoleApplication2這個項目。
之後使用shift+cmd+b快速鍵進行編譯。
shift+cmd+b
此時我們可以發現visual studio code編輯器的右側出現了一個Output視窗,顯示編譯過程的輸出內容。
顯示編譯成功。同時,在項目目錄下我們可以看到剛剛產生的ConsoleApplication2.exe檔案。
(寫到這裡,此時是0點11分)
這樣,我們就使用Visual studio code,利用mono編譯出一個來自windows的項目。
聽上去很有趣,不是嗎?那麼下面我們就執行一下產生的這個程式,並且嘗試調試它。
調試一個項目
OK,熟悉匹夫套路的人一定到這裡就知道了匹夫要做什麼了。不錯,這次還是要使用cmd+p這個快速鍵組合,將visual studio code的command顯示出來。不過這次的命令換成了>debug:configure。
cmd+p>debug:configure
這次調出了Debug的配置json檔案——launch.json。
可以看到預設的launch.json是用來處理nodejs的,名字就直接叫做“Launch app.js”。
所以我們需要將這個設定檔修改成使用mono才行。
下面是匹夫修改後的launch.json。
之後我們點擊Debug模式下的運行按鈕。
可以看到運行到了斷點。
此時我們開啟斷點,再回過頭去終端看一眼輸出結果。
OK,匹夫的名字被列印了出來。
可以看出,Visual studio code的確是一款輕量級,但同時也具備了智能感應,自動補全,git管理,編譯調試等功能的編輯器。這讓人如何能不愛呢?
0x04 整合到Unity3D
上面說了很多,但匹夫目前畢竟以開發使用Unity3D開發遊戲為主。所以能不能在Unity3D中用上Visual studio code呢?(當然很多同學會說Visual studio不是可以通過外掛程式整合到Unity3D上嗎?可,畢竟還有很多人使用Mac做開發嘛。。。)
答案是能,但匯入項目和之前並不相同。而且首先要明確一點,Visual studio code並非一款真正的IDE,且目前的版本是0.1.0,換言之還很不成熟。所以和Unity3D的合體,匹夫只做探索,並不存在主觀上的推薦或不推薦。
確保mono的版本足夠高
為什麼首先提這一句呢?因為眾所周知Unity3D採用的Mono版本還停留在若干年前的低版本。所以很多Unity3D的從業者的Mono版本其實是很低的,而為了能夠愉快的使用Visual studio code,官方的要求是mono的版本要高於3.12。所以為了保險,還是將mono升級成最新版本,當然你無須擔心Unity3D內建的mono會受到影響。
如果只是獵奇,則沒有必要修改Unity的預設編輯器
當然,Visual studio code也可以作為Unity的預設編輯器。但是匹夫提醒一句,如果只是為了獵奇,則沒有必要做這個修改,因為最後你還得改回去,多費力不討好的一件事。
開始整合
開啟我們的Unity3D介面,開啟Assets下拉式功能表,點擊Sync MonoDevelop project。
之後將項目匯入到Visual studio code中,和上面的例子基本類似,不過還有一些區別。
可以看到熟悉的Unity3D的項目目錄已經出現在了Visual studio code中。不過此時項目並未真正的匯入進來,由於Unity的項目有2個sln,一個是項目名.sln,另一個是項目名-csharp.sln。所以Visual studio code無法確定,這就需要我們去手動處理。點擊最下面的火焰表徵圖(project),出現了如的選擇project的下拉條。
此時我們選擇egg-csharp.sln。好啦,到此你就可以愉快的使用Visual studio code寫代碼了。
0x05 總結
雖然Visual studio code還很年輕,也許它還有很多不足,但不要忘了它的出現所帶來的意義。從開源CoreCLR到最近的Build大會,微軟的態度和行動的確讓人充滿期待。
剖析並利用Visual Studio Code在Mac上編譯、調試c#程式