5

次のスクリプトがあります。

$mArgs = @('myProj.vcxproj', '/t:Clean,Build' ,('/p:configuration=DEBUG'+';platform=win32;OutDir=./'))
Start-Process msbuild.exe -ArgumentList $mArgs -RedirectStandardOutput $tempFile -wait

上記は myProj を正常にビルドします。ただし、戻るまでにかなりの時間がかかります。上記の行に到達すると、msbuild ウィンドウが約 2 分間表示されます。その後、閉じます。その後、プロセスが完了するまでさらに 8 分かかります。上記を cmd ウィンドウで実行すると、完了するまでに約 2 分かかります。プロセス cmd.exe を開始し、msbuild をパラメーターとして渡してみましたが、同じ結果が得られました。Invoke-Expression も試しましたが、同じ結果が得られました。

この遅延を引き起こしている原因を知っている人はいますか?

前もって感謝します!

4

5 に答える 5

5

Win2012R2 で MSBuild を実行するために PowerShell v4.0 Start-Process を使用しています。通常、私のソリューションのビルド時間は 1 分ですが、ビルド サーバーでは 16 分です。MSBuild は、すべてのノードを閉じて最終的に終了するのに 15 分かかります ("Finished!!!" を出力するのに 16 分)。

PowerShell コード:

$process = Start-Process -FilePath $fileName -ArgumentList $arguments
 -WorkingDirectory $workingDir -NoNewWindow -PassThru -Wait
Write-Host "Finished!!!"
$exitCode = $process.ExitCode

MSBuild 引数:

$commandLine = "/nologo /p:Configuration=Release;Platform=x64 /maxcpucount:2"
 + " "+ $dir + "MySolution.sln"

/nodeReuse:falseを MSBuild コマンド ラインに追加すると、ビルド時間は通常 (1 分) に戻ります。

作業コードは次のとおりです。

function PsStartProcess([string]$fileName, [array]$arguments, [string]$workingDir)
{
    if (!$workingDir)
    {
        $workingDir = [System.IO.Directory]::GetCurrentDirectory()
    }

    $process = Start-Process -FilePath $fileName -ArgumentList $arguments -WorkingDirectory $workingDir -NoNewWindow -PassThru -Wait
    Write-Host "Finished!!!"
    $exitCode = $process.ExitCode
    $process.Close()

    return $exitCode
}

$exeFileName = "c:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe"
$commandLine = "/nologo /p:Configuration=Release;Platform=x64 /maxcpucount:2 /nodeReuse:false" + " "+ $dir + "MySolution.sln"
PsStartProcess $exeFileName $commandLine $binDir
于 2015-09-22T16:06:48.140 に答える
1

Start-Process を使用して MSBUILD を実行するのはなぜですか? PowerShell 内で直接実行します。例:

C:\PS> msbuild myproj.vcxproj /t:clean`,build /p:configuration=DEBUG`;platform=win32`;OutDir=. > $tempfile

PowerShell が通常解釈する文字,;.

于 2013-11-11T15:31:27.873 に答える
0

スクリプトを観察したところ、スクリプトの最初の行に一重引用符がないことがわかりました。欠落している見積もりでもう一度試して、それが役立つかどうかを報告してください。

于 2013-11-11T12:39:32.453 に答える
-1

Windows 7 では、ビルドが完了するとすぐにプロセスが戻りますが、Windows 8 でも同じ問題が発生します。可能であれば、他の環境でもテストしてみます。

于 2014-06-19T08:46:55.290 に答える