使用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參數的值傳入了.