Visual studio 偶尔出现的MSBUILD:错误MSB3428:

Visual studio 偶尔出现的MSBUILD:错误MSB3428:,visual-studio,powershell,msbuild,Visual Studio,Powershell,Msbuild,我有一个PowerShell脚本,可以执行以下操作: 使用devenv.exe升级旧的Visual Studio解决方案 使用MSBuild生成升级的Visual Studio解决方案 如果我运行这个脚本,我会得到一个错误,声明“MSBuff:MexBB328:不能加载VisualC++组件”VCuBuff.exe。 要解决此问题,1)安装.NET Framework 2.0 SDK,2)安装Microsoft Visua l Studio 2005或3)将组件的位置添加到系统路径(如果 安装在

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

  • 使用devenv.exe升级旧的Visual Studio解决方案
  • 使用MSBuild生成升级的Visual Studio解决方案
  • 如果我运行这个脚本,我会得到一个错误,声明“MSBuff:MexBB328:不能加载VisualC++组件”VCuBuff.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
            }
    

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

    毫无疑问,环境变量

    在PS中;在会话开始时初始化环境变量

    如果一个在PS会话之外由安装程序(!)更新,则该值在当前会话中未更新


    但是在你的下一次跑步中;更新后的值作为环境变量初始化的一部分再次引入。

    对于存在类似问题的任何人:

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

    Piping-devenv修复了以下问题:

    & $DevenvExe $SolutionPath /upgrade | Out-Null
    
    通过此修改,直到Devenv完全执行完毕,才会调用MSBuild