天天看點

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

寫篇小文來聊聊在Mac上如何使用Visual Studio Code編譯和調試C#代碼,最後匹夫也會嘗試把Visual Studio Code嵌入Unity3D中,作為一個準“IDE”使用。

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在Mac上編譯、調試c#程式
剖析并利用Visual Studio Code在Mac上編譯、調試c#程式

我們可以清楚的看到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的版本,之後解壓縮即可。

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

更詳細的安裝說明可以參考此處。

自定義配置檔案

OK,安裝完成之後,終于可以開始我們的visual studio code的初體驗了。

由于我比較常用的一個功能就是定義跳轉,是以對定義跳轉的快捷鍵十分敏感。而我的Mac上F12預設給了音量調節,所對很多把F12作為定義跳轉的編輯器我起初都是很排斥的(duang~~~)。不過visual studio code這種編輯器顯然會提供很友善的使用者自定義的Json配置。

那麼為了找到控制快捷鍵配置的Json檔案,我首先使用cmd+p這個快捷鍵組合,将visual studio code的command顯示出來。

cmd+p      
剖析并利用Visual Studio Code在Mac上編譯、調試c#程式

這裡就是所有的指令了。

之後隻需要輸入key就發現了Open KeyBoard Shortcuts這個指令,執行它就打開了預設的快捷鍵配置。

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

其中左側便是預設的快捷鍵設定,而右側則是使用者自定義的鍵位設定json檔案。這裡我将定義跳轉設定成了自己習慣的cmd+y的組合。

我舉這個例子,主要是為了說明我們可以很友善的自定義這個編輯器。那麼下面我繼續和大家聊聊,如何使用visual studio code在Mac上打開、編譯并調試一個項目。

0x03 打開、編譯并調試一個項目

為了示範visual studio code所謂的跨平台能力,我首先在Windows上生成一個項目,名字叫做ConsoleApplication2,這個項目主要用來實作一個自我介紹的功能。下面我就分别從打開、編譯和調試這三個方面來聊聊。

首先展示一下這個來自Windows的項目在Mac上的位置和内容:

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

打開一個項目

要編譯這個項目,我們顯然要先在Visual studio code中導入該項目。

我們隻需要選擇File下拉菜單中的Open即可:

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

此時項目已經導入了Visual studio code中。

打開Programe.cs檔案,我們可以看到智能感應,自動補全的功能。

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

項目已經導入了,那麼下一步我們就需要對項目進行編譯了。

編譯一個項目

此時我們再次使用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視窗,顯示編譯過程的輸出内容。

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

顯示編譯成功。同時,在項目目錄下我們可以看到剛剛生成的ConsoleApplication2.exe檔案。

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

(寫到這裡,此時是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。

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

之後我們點選Debug模式下的運作按鈕。

可以看到運作到了斷點。

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

此時我們打開斷點,再回過頭去終端看一眼輸出結果。

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

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在Mac上編譯、調試c#程式

之後将項目導入到Visual studio code中,和上面的例子基本類似,不過還有一些差別。

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

可以看到熟悉的Unity3D的項目目錄已經出現在了Visual studio code中。不過此時項目并未真正的導入進來,由于Unity的項目有2個sln,一個是項目名.sln,另一個是項目名-csharp.sln。是以Visual studio code無法确定,這就需要我們去手動處理。點選最下面的火焰圖示(project),出現了如下圖的選擇project的下拉條。

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

此時我們選擇egg-csharp.sln。好啦,到此你就可以愉快的使用Visual studio code在Unity3D的項目中寫代碼了。

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

0x05 總結

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

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

本作品采用知識共享署名-非商業性使用-相同方式共享 2.5 中國大陸許可協定進行許可,我的部落格歡迎複制共享,但在同時,希望保留我的署名權陳嘉棟(慕容小匹夫),并且,不得用于商業用途。如您有任何疑問或者授權方面的協商,請給我留言。

知乎專欄:

Runtime

聯系方式:

Email:[email protected]