偶尔发生的MSBUILD:错误MSB3428:

时间:2018-02-20 23:43:14

标签: visual-studio powershell msbuild

我有一个执行以下操作的PowerShell脚本:

  1. 使用devenv.exe升级旧的Visual Studio解决方案。
  2. 使用MSBuild构建升级的Visual Studio解决方案。
  3. 如果我运行此脚本,则会收到一条错误,指出" 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
            }
    

    可能会发生什么导致错误在第一次执行迭代时发生,但在所有其他尝试中成功?

2 个答案:

答案 0 :(得分:1)

对于遇到类似问题的任何人:

看起来问题是Devenv有时在MSBuild构建解决方案之前没有完成执行。如果在没有升级的情况下构建解决方案,则会显示MSBuild错误消息。这解释了为什么后续尝试有效(解决方案只需要升级一次)。

管道devenv解决了这个问题:

& $DevenvExe $SolutionPath /upgrade | Out-Null

通过这个修改,在Devenv完成执行之前,MSBuild不会被调用。

答案 1 :(得分:0)

环境变量,毫无疑问!

在PS中;环境变量在会话的 start 处初始化。

如果在PS会话之外通过安装程序(!)更新了一个,则当前会话中的值更新。

然而,在你的下一次运行;更新后的值将作为环境变量初始化的一部分再次引入。