剖析並利用Visual Studio Code在Mac上編譯、調試c#程序

本文寫於2015年的微軟Build大會之後,不過發現有很多朋友仍然不大清楚在Mac上如何利用vscode進行開發,所以拋磚引玉,在此重發一下本文。

0x00 前言

一周多以前的微軟的Build大會上,微軟發布了一個讓很多人眼前一亮的工具,也是本文的主角——Visual Studio Code。很多使用Windows的朋友都很高興,認為又多了一個很不錯的文檔編輯器。不過匹夫更關心的是它的跨平台能力,這不,匹夫偷得半日閑,寫篇小文來聊聊在Mac上如何使用Visual Studio Code編譯和調試C#代碼,最後匹夫也會嘗試把Visual Studio Code嵌入Unity3D中,作為一個準「IDE」使用。

0x01 Visual Studio Code是誰?

好啦,既然要聊Visual Studio Code,那我們總是要先知道它是何方神聖吧?

關注微軟或者微軟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了,我們只需要去到官網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,我的名字chenjd被列印了出來。

可以看出,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在Unity3D的項目中寫代碼了。

0x05 總結

雖然Visual studio code還很年輕,也許它還有很多不足,但不要忘了它的出現所帶來的意義。從開源CoreCLR到最近的Build大會,微軟的態度和行動的確讓人充滿期待。

推薦閱讀:

跟Unity學代碼優化
聊聊寫博客的這兩年&&《Unity 3D腳本編程:使用C#語言開發跨平台遊戲》正式出版

TAG:C# | Unity游戏引擎 | VisualStudioCode |