09:04

Visual Studio 2010のCPPプロジェクトの出力フォルダを変更するのは、プロジェクトのプロパティの「構成プロパティ>>全般>>出力ディレクトリ」を変更すればよい。

15:14

以前、PowerShellを使うとリモートフォルダのアクセスに時間がかかるという書いていたが、それは間違いで MS-Build の終了に時間がかかっていた。

kyamawaki.hatenablog.com

調べた結果、次のことが分かった。

  • Start-Process に -NoNewWindow オプションを付けるとプロセスの終了に時間がかかる
  • PowerShellスクリプトはバッチファイルから呼び出しているのだが、バッチをコマンドラインから呼び出すときは時間がかからない。Jenkinsから呼び出すと時間がかかる

16:59

Start-Processで時間がかかる原因が分からなかったが、System.Diagnostics.Process を使うようにすることで問題が回避できることが分かった。 System.Diagnostics.Process.Start()も問題があるようなので、次のページを参考にスクリプトを修正した。

hidari-lab.hatenablog.com

#-- Create Process --
$msbuild = "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe"
$buildArgs = "/t:rebuild /p:Configuration=Release App.sln"
$proc = New-Object "System.Diagnostics.Process"
$proc.StartInfo = New-Object "System.Diagnostics.ProcessStartInfo" @($msbuild, $buildArgs)
$proc.StartInfo.WorkingDirectory = (Get-Location).Path
$proc.StartInfo.RedirectStandardOutput = $True
$proc.StartInfo.RedirectStandardError = $True
$proc.StartInfo.UseShellExecute = $False

#-- 標準出力受信用StringBuilder作成 --
$stdOutBuilder = New-Object -TypeName System.Text.StringBuilder
$stdErrBuilder = New-Object -TypeName System.Text.StringBuilder

#-- 標準出力受信イベント設定 --
$action = {
    if(![string]::IsNullOrEmpty($EventArgs.Data)){
        $Event.MessageData.AppendLine($EventArgs.Data)
    }
}
$stdOutEvent = Register-ObjectEvent -InputObject $proc -Action $action -EventName "OutputDataReceived" -MessageData $stdOutBuilder
$stdErrEvent = Register-ObjectEvent -InputObject $proc -Action $action -EventName "ErrorDataReceived" -MessageData $stdErrBuilder

#-- ビルドプロセス開始 --
$proc.Start() | Out-Null
$proc.BeginOutputReadLine()
$proc.BeginErrorReadLine()
$proc.WaitForExit()

#-- 標準出力受信イベント解除 --
Unregister-Event -SourceIdentifier $stdOutEvent.Name
Unregister-Event -SourceIdentifier $stdErrEvent.Name

#-- 標準出力表示 --
echo $stdOutBuilder.ToString() 
echo $stdErrBuilder.ToString() 

if ($proc.ExitCode -ne 0)
{
    exit 1
}

Start-Process で応答が帰らない問題も、標準出力のバッファが枯渇することが原因な気がしてきた。標準出力バッファサイズを変更できれば確認できそうだけど。