1. 程式人生 > >基於Mono和VSCode打造輕量級跨平臺IDE

基於Mono和VSCode打造輕量級跨平臺IDE

ring linux ++ req ati args .html 有一個 asc

??近期Visual Studio推出Mac版本號的消息迅速在技術圈裏刷屏,當project師們最喜歡的筆記本電腦Mac,邂逅地球上最強大的集成開發環境Visual Studio的時候,會碰撞出如何精彩的火花呢?在微軟新任CEO納德拉的“移動為先、雲為先”戰略下,微軟的轉變漸漸開始讓人欣喜。從.NET Core、VSCode、TypeScript再到近期的Visual Studio For Mac,這一系列動作讓我們感覺到。微軟的技術棧越來越多地向著開源和跨平臺兩個方向努力。

我們曾經固執地覺得。微軟的技術棧註定永遠無法擺脫Windows的束縛,而其實這個世界每天都在發生著變化。也許這次Visual Studio推出Mac版這件事情,本質上是微軟收購的Xamarin公司旗下產品Xamarin Studio的一次改頭換面。但是這件事情說明。微軟正在努力讓.NET技術棧融入很多其它的應用場景。對我而言,我是沒有錢去買一臺Mac的,所以在這篇文章中,我們將在Linux下通過Mono和VSCode來打造一個輕量級的IDE。

而據說Mono會和Xamarin一樣。將來會成為.NET基金會的一部分。

??好了,我們首先在Windows世界裏進行彩排。在開始以下的內容曾經,請保證你的計算機上安裝了Mono和VSCode。假如你常常關註我的博客,你應該會知道Mono在這裏的作用是什麽?。簡而言之,Mono為我們提供了編譯器環境和執行時環境。在這個基礎上VSCode這個天生帶著Visual Studio基因的編輯器,則能夠為我們提供基礎的代碼調試功能。這是我們這篇文章寫作的關鍵因素。

假設你還對Mono一無所知,以下的兩篇文章能夠幫助你高速了解:

  • 使用Mono讓.NET程序跨平臺執行
  • 使用Mono打造輕量級的.NET執行時

??在我們了解了Mono以後,就能夠考慮將Mono作為VSCode的執行時環境,這意味著我們能夠在使用VSCode的同一時候直接編譯代碼。眼下在VSCode中內建的執行時支持為Node/Node2,所以假設我們希望在VSCode中調試很多其它的語言。我們就必須要為VSCode安裝對應的插件。

由於其實在VSCode中編譯代碼我們能夠直接通過Task來完畢編譯,但當我們希望在VSCode中對代碼進行調試的時候,我們就必須借助插件來完畢調試任務。這也許從側面印證了VSCode的產品定位就是一個文本編輯器。

??而對於微軟推出的這樣一款產品,我們也許會疑惑。為什麽這個編輯器提供的內建支持竟然是Node,而不是我們所熟悉的.NET技術體系。這個原因很easy理解,假設你聽說過Github出品的編輯器Atom,或者是使用過Electron/Node-Webkit相關技術,那麽你一定會深刻地理解,VSCode本質上和Atom一樣。都是採用Web技術來構建跨平臺應用,而Node天生就具備Web屬性加成。所以我們就不難理解為什麽VSCode內建的支持是Node而非.NET技術體系。相同地,為了實現跨平臺的目標,在對C#語言的支持這個問題上,微軟選擇了OminiSharp這樣一個跨平臺的代碼自己主動補全工具,而非我們在Visual Studio中所熟知的Intellisense技術。

在.NETCore推出以後.NET跨平臺不再是夢想,我們對技術的探索就不應該再局限在Windows平臺上。

??博主關註Mono始於Unity3D引擎,由於Mono真正實現了.NET技術的跨平臺,而Unity3D引擎最為人所稱道的當屬其強悍的跨平臺能力。在這一點上Mono功不可沒。在此之前收費的Xamarin讓人望而卻步。所以Mono自然而然地就成為了我的選擇。由於博主的計算機上安裝了Mono,所以在一開始使用VSCode的時候,就先入為主地覺得在不安裝插件的情況下,應該就能夠直接在VSCode中編譯和調試代碼了。首先我們在VSCode中創建一個C#代碼文件,既然在程序世界裏萬事萬物都從Hello World說起,那麽我們這裏依舊遵循這個原則。在創建該代碼文件以後。我們將其所在的文件夾在VSCode中打開,這是由於:

在VSCode中僅支持以文件夾方式打開的文件的編譯和調試

所以這個時候我們在VSCode中的界面應該是如圖所看到的:

技術分享

好了,以下我們直接按下Ctrl+Shift+B來編譯代碼。此時VSCode將提示我們“配置任務執行程序”,這裏須要說明的是,在VSCode中你能夠感受到微軟對命令行和配置文件的偏執。這讓適應了Visual Studio這樣功能強大的我們相當不習慣,依照VSCode的提示或者是通過Ctrl+Shift+P打開命令面板,VSCode將在當前工作文件夾下為我們創建.vscode文件夾和tasks.json文件,在VSCode中不論什麽和項目相關的配置信息都會存儲在這裏啦。此時我們配置tasks.json:

{
    // See https://go.microsoft.com/fwlink/?

LinkId=733558 // for the documentation about the tasks.json format "version": "0.1.0", // 該命令須要在系統變量內定義 "command": "mcs", // 或者使用完整的可執行路徑 // "command: "C:\Program Files\Mono\bin\mcs.exe" "isShellCommand": true, "args": ["*.cs"], "showOutput": "always" }

在這裏須要說明的是一個tasks.json中能夠通過tasks屬性來配置多個任務執行程序。比如我們的項目中有Python和C#兩種代碼須要編譯。那麽我們就能夠配置兩個task,VSCode將在執行程序的時候讓用戶由哪一個task來編譯代碼。假設你看過我在前面介紹過的兩篇文章,就應該知道這裏的mcs.exe其實是Mono提供的C#編譯器。它負責將我們的C#代碼編譯為IL文件,然後IL文件再交由CLR來轉換為本機代碼。Mono提供的C#編譯器能夠將C#代碼編譯為.exe或者是.dll。但是在VSCode中好像默認都是編譯為.exe。所以假設有知道如何在這裏配置編譯輸出項的朋友。希望能夠告訴我怎麽去實現。

??如今,我們應該會得到一個MainClass.exe的文件,最初博主嘗試直接去配置launch.json,發現直接填寫type為mono在VSCode中是無法識別的,最後決定去安裝mono-debug的插件。安裝插件在VSCode中是很簡單的。按下Ctrl+Shift+X打開插件界面。能夠在這裏查看最流行的插件列表、官方推薦的插件列表等等,我們直接搜索mono-debug然後安裝插件就可以。但是我不曾想到的是,我猜中故事的開頭,卻沒有猜中故事的結尾,這個插件是不支持Window平臺的這個插件是不支持Windows平臺的這個插件是不支持Windows平臺的

??好吧,如今看起來Linux是我唯一能夠去嘗試的平臺了。博主這裏選擇的是顏值最高的Elementary OS。這是一個衍生自Ubuntu的Linux發行版。在VSCode正式版公布以後。在Linux下用VSCode來編程是我一直在嘗試的事情,請不要說Linux系統使用起來會很困難。博主在安裝這些軟件的過程中能夠說是相當順利。建議大家在Linux平臺下安裝C#、Mono-Debug和Python這3個插件。須要說明的是C#和Mono-Debug在第一次使用的時候,須要在網絡環境下下載相關依賴。以下是博主眼下的插件安裝情況:

技術分享

??我們如今按F5進行調試。和編譯時一樣。假設用戶沒有為當前項目配置“任務調試程序”。VSCode會提示我們去創建一個配置文件launch.json,我們這裏選擇mono。該選項在安裝Mono-Debug插件曾經是沒有的,該配置文件例如以下,我們註意到這裏須要改動program屬性為MainClass.exe:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "mono",
            "request": "launch",
            "program": "${workspaceRoot}/MainClass.exe",
            "args": [],
            "cwd": "${workspaceRoot}",
            "preLaunchTask": "",
            "runtimeExecutable": null,
            "env": {},
            "externalConsole": false
        },
        {
            "name": "Attach",
            "type": "mono",
            "request": "attach",
            "address": "localhost",
            "port": 5085
        }
    ]
}

??這裏有一個小插曲。在博主執行這個簡單的程序的時候,提示Mono的版本號和Mono-Debug插件的版本號要求不一致,由於Mono-Debug插件使用的是最新版本號的Mono。所以。果斷卸載眼下的mono,然後安裝最新的mono。安裝方法為:

sudo apt-get install mono-complete

這樣我們就能夠看到眼前的成果啦,我們成功地在VSCode執行了一個C#程序:

技術分享

??盡管我很想在這篇博客中搞點幹貨出來。但是當我折騰數天以後。我大概就能夠寫出這樣一篇相當零碎的文章。到眼下為止我還是沒有搞明確,為什麽我在調試地過程中,VSCode不會在我設置了斷點地地方停下來。希望知道這個原因的朋友能夠告訴我啊。這個過程最有意義的地方在於讓我進一步熟悉了Linux。在不一樣的地方。會有不一樣的風景。這個世界很大,不要給自己設限。興許我會去研究VSCode中的調試技巧以及.NETCore相關內容。能看到C#跨平臺執行是件幸福的事情,而跨平臺開發是我一直在探索的方向之中的一個。夜晚已然來臨了。而這篇文章就是這樣了。謝謝大家的關註,晚安!

基於Mono和VSCode打造輕量級跨平臺IDE