我現在大多數自動化的小工具都是使用 LINQPad 來撰寫,執行速度快且管理方便,但是在 CI/CD 環境中,LINQPad 並不是一個常見的工具,還好 LINQPad 有提供 LPRun 工具,可以直接把現成的 *.linq
檔案直接拿來當成腳本執行,因此拿來 CI 的環境用是非常方便的,完全可以當作 C# 腳本來使用。這篇文章我就來介紹一下 LPRun
使用的方式。
步驟 1: 下載 LINQPad
由於 LINQPad 本身是一個免費軟體,任何人都可以下載使用,也有提供完整的 IDE 開發環境,但免費版並沒有 IntelliSense 與 AI 功能。所以拿 LINQPad 來執行一些現有的程式還算便利,但拿來寫 Code 就沒有那麼好用了,如果你像我一樣有大量的 Coding 需求,建議購買付費版本。
以下是下載的命令:
curl -sL https://www.linqpad.net/GetFile.aspx?LINQPad8.zip -o LINQPad8.zip
步驟 2: 解壓縮 LINQPad8.zip
解壓縮 LINQPad8.zip 到指定的目錄,這裡我們假設用 7-Zip 解壓縮到 C:\LINQPad8
目錄下。
7z x LINQPad8.zip -oC:\LINQPad8
可參考我之前文章: 分享幾個常用的 7-Zip 壓縮與解壓縮命令
步驟 3: 設定 PATH 環境變數
LINQPad8.zip
解壓縮後會有 LPRun8-x64.exe
、LPRun8-x86.exe
、LPRun8-arm64.exe
三個執行檔,這三個檔案都是 LINQPad 的 LPRun
執行檔,主要用來載入 *.linq
查詢並執行查詢中的程式。但為了要能夠在任何地方執行 LINQPad 的查詢,我們需要把解壓縮的路徑加入到加入到 PATH 環境變數中。
如果只是一次性的設定 PATH
環境變數,那倒是還蠻簡單的,直接修改當下命令列環境的 Session (工作階段) 環境變數就可以了,這部分相對簡單,命令如下:
但如果要永久性的設定 PATH
環境變數,那就需要透過一些技巧來處理。
-
Command Prompt
curl -sL https://github.com/doggy8088/SetEnv/releases/download/1.0/SetEnv.exe -o SetEnv.exe
SetEnv.exe -ua PATH %"C:\LINQPad8"
-
PowerShell
Invoke-WebRequest -Uri "https://github.com/doggy8088/SetEnv/releases/download/1.0/SetEnv.exe" -OutFile "SetEnv.exe"
SetEnv.exe -ua PATH %"C:\LINQPad8"
-
另一個不用下載的 PowerShell 解決方案
# 這個 $InstallFolder 變數用來指定你要加入 PATH 環境變數的路徑
$InstallFolder = 'C:\LINQPad8'
# $env:Path, [Environment]::GetEnvironmentVariable('PATH'), and setx all expand
# variables (e.g. %JAVA_HOME%) in the value. Writing the expanded paths back
# into the environment would be destructive so instead, read the path directly
# from the registry with the DoNotExpandEnvironmentNames option and write that
# value back using the non-destructive [Environment]::SetEnvironmentVariable
# which also broadcasts environment variable changes to Windows.
try {
$registryKey = [Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment', $false)
$originalPath = $registryKey.GetValue(`
'PATH', `
'', `
[Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames `
)
$pathParts = $originalPath -split ';'
if (!($pathParts -contains $InstallFolder)) {
Write-Host "Adding $InstallFolder to PATH"
# SetEnvironmentVariable broadcasts the "Environment" change to
# Windows and is NOT destructive (e.g. expanding variables)
[Environment]::SetEnvironmentVariable(
'PATH', `
"$originalPath;$InstallFolder", `
[EnvironmentVariableTarget]::User`
)
# Also add the path to the current session
$env:PATH += ";$InstallFolder"
} else {
Write-Host "An entry for $InstallFolder is already in PATH"
}
} finally {
if ($registryKey) {
$registryKey.Close()
}
}
上述命令節錄自 install-azd.ps1 腳本。
步驟 4: 執行 LINQPad 查詢
執行時請記得選擇對應的 LPRun8-*.exe
執行檔,不同的 CPU 架構需要執行不同的程式。大部分的情況下,選擇 LPRun8-x64.exe
應該是不會錯,但是如果你的 LINQPad 查詢有參考到 x86
的 DLL 的話,那就需要使用 LPRun8-x86.exe
來執行。
執行查詢最簡單的用法如下:
LPRun8-x64.exe MyQuery.linq
LINQPad 官方是建議將執行檔更名為 LPRun8.exe
來跑,這樣你的自動化腳本才能比較通用,不用考慮 CPU 架構的問題。
注意: LPRun
其實有非常多很棒的用法,有自動化需求的人建議閱讀 LINQPad Command-Line and Scripting 官方文件。
撰寫 Azure Pipeline YAML
如果你是使用 Azure Pipelines 的話,可以透過以下的 YAML 腳本來初始化並執行 LINQPad 查詢:
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- script: 'curl -sL https://www.linqpad.net/GetFile.aspx?LINQPad8.zip -o $(Agent.ToolsDirectory)\LINQPad8.zip'
displayName: '下載 LINQPad8.zip'
- task: ExtractFiles@1
displayName: '解壓縮 LINQPad8.zip'
inputs:
archiveFilePatterns: '$(Agent.ToolsDirectory)\LINQPad8.zip'
destinationFolder: '$(Agent.ToolsDirectory)\LINQPad8'
cleanDestinationFolder: false
overwriteExistingFiles: true
- script: 'echo ##vso[task.prependpath]$(Agent.ToolsDirectory)\LINQPad8'
displayName: '加入 LINQPad 8 到 PATH 環境變數'
- script: 'LPRun8-x64.exe MyQuery.linq'
displayName: '執行 MyQuery.linq'
撰寫 GitHub Actions YAML
如果你是使用 GitHub Actions 的話,可以透過以下的 YAML 腳本來初始化並執行 LINQPad 查詢:
name: LINQPad Workflow
on:
push:
branches: [ main ]
jobs:
run-linqpad:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: 下載 LINQPad8.zip
run: curl -sL https://www.linqpad.net/GetFile.aspx?LINQPad8.zip -o %RUNNER_TOOL_CACHE%\LINQPad8.zip
shell: cmd
- name: 解壓縮 LINQPad8.zip
run: |
powershell -Command "Expand-Archive -Path %RUNNER_TOOL_CACHE%\LINQPad8.zip -DestinationPath %RUNNER_TOOL_CACHE%\LINQPad8 -Force"
shell: cmd
- name: 加入 LINQPad 8 到 PATH 環境變數
run: echo %RUNNER_TOOL_CACHE%\LINQPad8>> %GITHUB_PATH%
shell: cmd
- name: 執行 MyQuery.linq
run: LPRun8-x64.exe MyQuery.linq
shell: cmd
課程推薦
我之前有舉辦過一場精通 LINQPad 8 開發工具課程,現在你也可以購買本次課程的錄影來學習,這是一個非常實用的課程,可以讓你快速上手 LINQPad 8 開發工具。報名課程時還可以選擇搭配 LINQPad 8 Premium 終身授權 的方案,連同課程一起購買更優惠唷!👍
除此之外,報名此課程還可以加入一個專屬本班學員專屬的 LINPQad 交流社群 (LINE 社群),裡面有三百多人,大家可以互相交流 LINQPad 的使用心得,也可以提問問題,目前也有累積不少記事本分享,也是一個非常棒的學習資源。
如果你也有興趣購買此課程的話,歡迎來信洽詢!📧
相關連結