ビルド後のイベントで.NETプロジェクトをセットアップして、Powershellスクリプトを実行することは可能ですか?このスクリプトを使用していくつかのファイルを生成しています。
また、デバッグビルドかリリースビルドかをスクリプトに渡すことができます。この例は素晴らしいでしょう。
以下に例を示します。
まず第一に:スクリプトを実行するにはPowerShellを構成する必要があるという事実に注意する必要があります。次の行により、PowerShellでスクリプトを実行できます。
Set-ExecutionPolicy RemoteSigned
特記事項:64ビットシステムを実行している場合は、 'devenv.exe 'Visual Studio 2010実行可能ファイルは32Bits exeであるため、PowerShell 32でスクリプトを実行できるようにする必要があります。
ここで、プロジェクトのプロパティに移動し、(フランス語でごめんなさい)の下にあるようにポストビルドを構成できます。
例えば :
ファイル 'psbuild.ps1
'があります。これは、ターゲットパスに 'test.txt
'を作成し、内部に構成名を付けます。ポストビルドスクリプトをデバッグするためのさまざまな方法(メッセージボックス、サウンド、出力のメッセージ)をコメントに入れました
param ([string]$config, [string]$target)
#[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#[void][System.Windows.Forms.MessageBox]::Show("It works.")
#[Console]::Beep(600, 800)
#Write-Host 'coucou'
set-content $target -Value $config -Force
コマンドSet-ExecutePolicyは、現在のセッションで一時的に実行ポリシーを設定します。これをpowershellで設定し、vsでpost buildコマンドを実行すると、まだ許可されません。最初に設定してから、次のようなps1スクリプトを実行してください
powershell -ExecutionPolicy Unrestricted $(ProjectDir)Deploy.ps1 -ProjectDir $(ProjectDir) -TargetPath $(TargetPath)
Visual Studioからpower-Shellスクリプトを呼び出す前に、ExecutionPolicyを次のようにpower-ShellウィンドウからRemoteSigned
に設定します...
Set-ExecutionPolicy -Scope CurrentUser;
ExecutionPolicy: RemoteSigned;
次に、powershellスクリプトを次の方法で呼び出します...
(完全な「powershell.exe」ファイルパスを渡す必要はありません)
powershell.exe $(SolutionDir)Setup.ps1 -SolutionDir $(SolutionDir) -ProjectPath $(ProjectPath)
次に、スクリプトで、このようなパラメータをいつでも読み取ることができます...
param([string]$SolutionDir,
[string]$ProjectPath);
#Write-Host ($SolutionDir +" Call this script with following aruments");
#Write-Host ($ProjectPath +" Call this script with following aruments");
システム全体の設定をいじって32ビット環境と64ビット環境を区別する代わりに、多くのより簡単で信頼性の高いアプローチは、PowerShellの呼び出しでExecutionPolicy
を指定することです。次のように:
C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted
PS C:\Users\xyz> Get-ExecutionPolicy
Unrestricted
PS C:\Users\xyz> exit
C:\Users\xyz>PowerShell -ExecutionPolicy RemoteSigned
PS C:\Users\xyz> Get-ExecutionPolicy
RemoteSigned
上記のコードでは、Get-ExecutionPolicy
は、現在のモードを示します。また、PowerShell自体の呼び出しでこのモードがどのように指定されているかに注意してください。これは、スクリプトファイル名と組み合わせることができます。
test.ps1の内容:
echo ('The current policy is ' + (Get-ExecutionPolicy)).ToString()
スクリプトが無効になっているシステムでUnrestricted
ポリシーを使用してtest.ps1を呼び出す:
C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted -file test.ps1
The current policy is Unrestricted
また、上記の呼び出しはnotが管理者権限を必要とするため、Visual Studioのビルド前ステップなどで呼び出すことができます。
ビルド後の偶数コマンドで以下のコマンドで作成しました:
PowerShell -NoProfile -ExecutionPolicy unrestricted -file $(SolutionDir)AutomationScript\DBAutomationScript.ps1 -target $(SolutionDir)MUFG.SECMOD.Data\SqlScripts -generatedFileName $(SolutionDir)MUFG.SECMOD.Data\SqlScripts\DeploymentDBScript.sql
DBAutomationScript.ps1の内容:
param ([string]$target, [string]$generatedFileName)