.net持續集成cake篇之使用vs或者vscode來輔助開發cake腳本


系列目錄

使用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模板

avatar

創建的時候我們把它的名稱修改為build.cake(這里仍然是慣例,其實也可以是其它名稱,但是需要做相應修改,這里先不介紹)

我們使用Vs打開Cake文件,可以看到雖然沒有智能提示,但是有一些基本的代碼着色

avatar

如果關鍵字有錯誤,則代碼不會高亮着色顯示.

使用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進程),然后點擊這樣就附加進程就成功了.

我們可以看到,斷點被擊中了

avatar

我們可以像調試普通C#腳本一樣調試cake文件.

使用Visual Studio Code開發工具

雖然Cake提供了vs插件,但是不論是開發和調試體驗都不是很好,而cake vs code插件則支持cake文件生成,啟動文件build.ps1下載,代碼智能提示和調試功能.本節將詳細介紹這些功能.

一.安裝cake vscode插件

這里我們刪除build.cake和build.ps1文件,使用vscode來生成它們.

使用vscode 打開項目(文件->打開文件夾)或者在項目所在目錄點擊右鍵,在右鍵菜單中選擇在此處打開vscode選項.

打開后我們在插件標簽里搜索cake這樣就打開了搜索搜索界面

avatar

由於我已經安裝過了,因此后面變成了齒輪圖標,如果沒有安裝則會出現安裝按鈕,安裝完成后重新加載或者重啟vscode方可生效.

然后,我們按下ctrl+shift+p在出現的命令行里面輸入cake會出現以下命令

avatar
我們選擇Install to workspace下面會讓你確認文件名,點擊駕車即可,然后還有有一些提示,只需要一路選擇yes就行了.

完成后會在當前工作區添加build.cake和build.ps1文件

二.添加智能提示

cake Vscode插件一個非常酷的功能就是智能提示,有了智能提示我們編碼的效率和質量將大大提高.

仍然像上面一個按下ctrl+shift+p在出現的命令框中輸入cake,在出現的下拉中選擇Install intellisense support 過一會后會后vscode右下角會出現安裝成功提示.如果不確定是否安裝成功可以再執行一次安裝,如果已成功安裝則提示已經安裝.

有了智能提示以后,我們輸入task,就會出現提示列表

avatar

需要注意的是智能提示是針對項目環境的,如果是新的項目,仍然需要再次在工作區執行安裝.

三.在vscode里調試cake文件

我們在vscode里點擊蟲子圖標,然后點擊右向綠色箭頭,這時候中間會出現輸入框,我們輸入cake便會出現與cake相關的調試配置選項

avatar

如果沒有反應,再次執行一次.

avatar

如果執行成功,這里的文字會變成如圖示,如果沒有成功,則顯示的是No configuration

成功后,再點擊綠色右向箭頭,如果腳本沒有錯誤,斷點會被擊中

avatar

有了這些貼心的工具,相信大家不會再對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參數的值傳入了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM