我有一个执行以下操作的PowerShell脚本:
如果我运行此脚本,则会收到一条错误,指出" MSBUILD:错误MSB3428:无法加载Visual C ++组件" VCBuild.exe"。 要解决此问题,1)安装.NET Framework 2.0 SDK,2)安装Microsoft Visua l Studio 2005或3)将组件的位置添加到系统路径中(如果它) 安装在别处。"
对我来说很奇怪的是,如果在看到错误消息后重新运行脚本,我可以成功升级和构建解决方案。我尝试在多台计算机上运行脚本,而且只在第一次尝试执行脚本时才看到错误消息。后续尝试成功。
我正在使用Windows 10,PowerShell版本5.1和Visual Studio 2015社区。
以下是相关的代码片段:
$DevenvExe = 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe'
$MsBuildExe = 'C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe'
$SolutionPath = "$CurrentPath\portaudio\build\msvc\portaudio.sln"
& $DevenvExe $SolutionPath /upgrade
& $MsBuildExe $SolutionPath /p:Configuration=Release /p:Platform=x64 /nr:false /m:4
if ($?) {
Write-Host "Success"
} else {
# This piece of code executes, followed by the MSBUILD error
Write-Host "PortAudio did not successfully build." -ForegroundColor Red
Write-Host "Please refer to the Operation Manual for instructions to build PortAudio." -ForegroundColor Red
}
可能会发生什么导致错误在第一次执行迭代时发生,但在所有其他尝试中成功?
答案 0 :(得分:1)
对于遇到类似问题的任何人:
看起来问题是Devenv有时在MSBuild构建解决方案之前没有完成执行。如果在没有升级的情况下构建解决方案,则会显示MSBuild错误消息。这解释了为什么后续尝试有效(解决方案只需要升级一次)。
管道devenv解决了这个问题:
& $DevenvExe $SolutionPath /upgrade | Out-Null
通过这个修改,在Devenv完成执行之前,MSBuild不会被调用。
答案 1 :(得分:0)
环境变量,毫无疑问!
在PS中;环境变量在会话的 start 处初始化。
如果在PS会话之外通过安装程序(!)更新了一个,则当前会话中的值不更新。
然而,在你的下一次运行;更新后的值将作为环境变量初始化的一部分再次引入。