C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2007/07/26 15:55
ビルド自動化のために。
PowerShell で Visual Studio のソリューションをリビルドするための関数。
ソリューションにセットアッププロジェクトが含まれている場合は注意が必要(後述)。
この関数は内部で Invoke-Process 関数を使用する。

[ パラメータ ]
solutionPath
ソリューションファイルのパス。

vsVersion
Visual Studio のバージョン。

timeoutMilliseconds
プロセスの実行時間に対するタイムアウト値 (単位:ミリ秒)。
無制限に待機する場合、-1 または Int32.MaxValue を指定。
省略した場合は -1。


[ 戻り値 ]
戻り値については Invoke-Process 関数を参照。


[ Rebuild-Solution 関数 ]
function global:Rebuild-Solution
{
    Param([String]$solutionPath, [string]$vsVersion, [int]$timeoutMilliseconds = [System.Threading.Timeout]::Infinite)
    trap { break; }
   
    if ([String]::IsNullOrEmpty($solutionPath)) { throw "引数 solutionPath が null または空の文字列です。"; }
    if ([String]::IsNullOrEmpty($vsVersion)) { throw "引数 vsVersion が null または空の文字列です。"; }
   
    $vsFolderName = $();
    if (@("9.0", "9", "2008") -contains $vsVersion)
    {
        $vsFolderName = "Microsoft Visual Studio 9.0";
    }
    elseif (@("8.0", "8", "2005") -contains $vsVersion)
    {
        $vsFolderName = "Microsoft Visual Studio 8";
    }
    elseif (@("7.1", "2003") -contains $vsVersion)
    {
        $vsFolderName = "Microsoft Visual Studio .NET 2003";
    }
    else
    {
        $vsFolderName = "Microsoft Visual Studio $vsVersion";
    }
    $devenvPath = "$Env:ProgramFiles\$vsFolderName\Common7\IDE\devenv.com"
    $devenvArgs = "/rebuild Release `"$solutionPath`"";
   
    return Invoke-Process $devenvPath $devenvArgs $timeoutMilliseconds;
}



[ 使用例 ]
$result = Rebuild-Solution "C:\work\Hoge\Hoge.sln" "9.0";
Write-Host $result.Message;
if (!$result.IsSuccess)
{
    Write-Host "ソリューションのリビルドに失敗しました。" -ForegroundColor "Red";
}



[ セットアッププロジェクトについて ]
既定ではソリューションのビルドを行ってもセットアッププロジェクトはビルドされない。
以下の手順を行うことで、Releaseビルド時にセットアップ プロジェクトもビルドされるよう設定できる。
  1. ソリューションエクスプローラでソリューションを選択する。
  2. [ ビルド ] - [ 構成マネージャ ] にて構成マネージャウィンドウを開く。
  3. [ アクティブ ソリューション構成 ] を "Release" に設定する。
  4. セットアッププロジェクトの [ ビルド ] 列にチェックを付ける。
  5. [ 閉じる ] ボタンをクリックして完了する。


[ 関連リンク ]
Devenv コマンド ライン スイッチ


【 ダウンロード 】
自作の PowerShell 関数は、以下の記事からまとめてダウンロードできます。

YokoKen.PowerShell.Scripts


[ 変更履歴 ]


2008/04/03
・実行結果の詳細を取得できるよう戻り値を変更。
・パラメータ vsVersion の型を String に変更、及び必須パラメータに変更。
・パラメータ timeoutMilliseconds を追加。

2008/03/03
・記事のタイトルを「PowerShell で VS 2005 のソリューションをリビルドするための関数」から「PowerShell で VS のソリューションをリビルドするための関数」に変更。
・VS のバージョンを指定できるよう、関数に vsVersion パラメータを追加。











トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/148-72e6e517