Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

【Visual Studio】Visual StudioのビルドイベントをPowerShellで書く

要旨

Windowsサービスアプリをビルドする時は、ビルド前にサービスを停止する必要があります。Visual Studioのビルドイベントを書いて自動化すると楽です。

バッチコマンドで書くのはつらそうなので、PowerShellで書いてみました。

PowerShellのスクリプトをPrevBuild.ps1、AfterBuild.ps1として作成し、プロジェクトのプロパティでビルドイベントを設定します。

スクリプト

PrevBuild.ps1

# サービスが開始されていたら、停止する。
$status = (Get-Service "[サービス名]").Status
if($status -eq "Running") {
    Stop-Service -Name "[サービス名]"
}

AfterBuild.ps1

# Settingsフォルダを出力ディレクトリにコピーする。 -Recurse:ファイルごとコピーする、-Force:上書きコピーする
Copy-Item ..\..\Settings .\ -Recurse -Force

# サービスを開始する。
Start-Service -Name "[サービス名]"

ビルド前に実行するコマンドライン

REM -ExecutionPolicy RemoteSigned 作成したスクリプトは署名がなくても実行可能にする 
powershell -ExecutionPolicy RemoteSigned -File "$(ProjectDir)Batch\PrevBuild.ps1"

ビルド後に実行するコマンドライン

REM -ExecutionPolicy RemoteSigned 作成したスクリプトは署名がなくても実行可能にする 
powershell -ExecutionPolicy RemoteSigned -File "$(ProjectDir)Batch\AfterBuild.ps1"

まとめ

これで、ビルド前に自動的にサービスが停止し、ビルドされたEXEでサービスが起動するようになりました。