使用Visual Studio來開發工具
前面我們都是通過手寫或者複製的方法來編寫Cake檔案,Cake使用的是C#語言,如果僅使用簡單的文字編輯器來編寫顯然效率是非常低下的,本節我們講解如何使用cake Visual Studio外掛來通過模板建立cake檔案,以及如何使得Visual Studio來除錯Cake檔案
安裝Cake Visual Studio外掛
我們在Visual Studio外掛管理器裡搜尋Cake
就可以搜尋到Cake for visual studio
外掛,然後我們安裝它.
關於Visual外掛搜尋和安裝我們這裡不再贅述,假定看的童鞋都有一定.net程式設計基礎.
外掛安裝完成後,我們再通過Vs新增內容的時候,就可以看到Cake模板
建立的時候我們把它的名稱修改為build.cake
(這裡仍然是慣例,其實也可以是其它名稱,但是需要做相應修改,這裡先不介紹)
我們使用Vs開啟Cake檔案,可以看到雖然沒有智慧提示,但是有一些基本的程式碼著色
如果關鍵字有錯誤,則程式碼不會高亮著色顯示.
使用Visual Studio對Cake指令碼進行除錯
對於複雜的構建指令碼,我們可能需要通過除錯來發現排除一些bug,下面介紹如何使用Visual Studio 對Cake指令碼進行除錯.
我們修改build.ps1
把最後面三段的內容修改為如下:
#&$CAKE_EXE $cakeArguments
Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"Diagnostic`" $UseMono $UseDryRun $UseExperimental $ScriptArgs --debug"
exit $LASTEXITCODE
實際上做的改動是把&$CAKE_EXE $cakeArguments
這一行註釋掉了,新增了下面Invoke-Expressions
這一行,其實中--debug是必要的,指明是以debug方式啟動指令碼,這樣指令碼在啟動後會處於暫停狀態,讓我們有機會通過Vs來附加這個程式
我們首先執行修改後的ps1檔案,出現如下資訊
Preparing to run build script...
Running build script...
Module directory does not exist.
NuGet.config not found.
Performing debug...
Attach debugger to process 21244 to continue
其實中process id每一次都是不一樣的,因此讀者看到的和上面的可能是不一樣的.
我們在Vs裡開啟要除錯的cake檔案,設定斷點,然後執行除錯->附加到程式
在出現的對話方塊中找到指令碼提示的程式(實際上為cake.exe程式),然後點選這樣就附加程式就成功了.
我們可以看到,斷點被擊中了
我們可以像除錯普通C#指令碼一樣除錯cake檔案.
使用Visual Studio Code開發工具
雖然Cake提供了vs外掛,但是不論是開發和除錯體驗都不是很好,而cake vs code外掛則支援cake檔案生成,啟動檔案build.ps1下載,程式碼智慧提示和除錯功能.本節將詳細介紹這些功能.
一.安裝cake vscode外掛
這裡我們刪除build.cake和build.ps1檔案,使用vscode來生成它們.
使用vscode 開啟專案(檔案->開啟資料夾)或者在專案所在目錄點選右鍵,在右鍵選單中選擇在此處開啟vscode選項.
開啟後我們在外掛
標籤裡搜尋cake
這樣就開啟了搜尋搜尋介面
由於我已經安裝過了,因此後面變成了齒輪圖示,如果沒有安裝則會出現安裝按鈕,安裝完成後重新載入或者重啟vscode方可生效.
然後,我們按下ctrl+shift+p
在出現的命令列裡面輸入cake
會出現以下命令
我們選擇Install to workspace
下面會讓你確認檔名,點選駕車即可,然後還有有一些提示,只需要一路選擇yes
就行了.
完成後會在當前工作區新增build.cake和build.ps1檔案
二.新增智慧提示
cake Vscode外掛一個非常酷的功能就是智慧提示,有了智慧提示我們編碼的效率和質量將大大提高.
仍然像上面一個按下ctrl+shift+p
在出現的命令框中輸入cake,在出現的下拉中選擇Install intellisense support
過一會後會後vscode右下角會出現安裝成功提示.如果不確定是否安裝成功可以再執行一次安裝,如果已成功安裝則提示已經安裝.
有了智慧提示以後,我們輸入task,就會出現提示列表
需要注意的是智慧提示是針對專案環境的,如果是新的專案,仍然需要再次在工作區執行安裝.
三.在vscode裡除錯cake檔案
我們在vscode裡點選蟲子圖示,然後點選右向綠色箭頭,這時候中間會出現輸入框,我們輸入cake便會出現與cake相關的除錯配置選項
如果沒有反應,再次執行一次.
如果執行成功,這裡的文字會變成如圖示,如果沒有成功,則顯示的是No configuration
成功後,再點選綠色右向箭頭,如果指令碼沒有錯誤,斷點會被擊中
有了這些貼心的工具,相信大家不會再對cake心有恐懼了.
四.vscode除錯cake檔案之高階技巧
我們知道,正常執行cake是通過build.ps1指令碼啟動的,通過ps1指令碼啟動可以傳入一些自定義的引數,而在vscode裡則是直接點選除錯按鈕進行除錯的,這樣我們就無法通過ps1檔案傳入引數了,當然我們可以通過修改cake指令碼引數或者通過debug指令來除錯,然而這些都不是最好的選擇,修改cake檔案裡的變數後如果忘記修改回原來值則上線後可能出現問題.增加debug對於一些簡單的指令碼檔案來說顯示是小題大作了.其實我們可以通過修改launch.json
來實現模擬外部傳入引數
在vscode裡搜尋檔案快捷方法如下:按下
ctrl+p
然後輸入要搜尋的檔名稱
預設生成的launch.json檔案如下
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Cake: Debug Script (CoreCLR)",
"type": "coreclr",
"request": "launch",
"program": "${workspaceRoot}/tools/Cake.CoreCLR/Cake.dll",
"args": [
"${workspaceRoot}/build.cake",
"--debug",
"--verbosity=diagnostic"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": true,
"externalConsole": false
}
]
}
我們在args里加入一個configuration引數
修改後如下
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Cake: Debug Script (CoreCLR)",
"type": "coreclr",
"request": "launch",
"program": "${workspaceRoot}/tools/Cake.CoreCLR/Cake.dll",
"args": [
"${workspaceRoot}/build.cake",
"--debug",
"--verbosity=diagnostic",
"--configuration=debug"
],
"cwd": "${workspaceRoot}",
"stopAtEntry": true,
"externalConsole": false
}
]
}
我們通過單步除錯或者通過控制檯輸入的方式可以看到,configuration引數的值傳入了.