代码之家  ›  专栏  ›  技术社区  ›  sadykhovful

偶尔出现MSBUILD:错误MSB3428:

  •  1
  • sadykhovful  · 技术社区  · 8 年前

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

    1. 使用devenv升级旧的Visual Studio解决方案。exe。
    2. 使用MSBuild生成升级的Visual Studio解决方案。

    如果运行此脚本,则会出现一个错误,说明“MSBUILD:error 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 回复  |  直到 8 年前
        1
  •  2
  •   sadykhovful    8 年前

    对于任何有类似问题的人:

    问题似乎是,有时在MSBuild构建解决方案之前,Devenv没有完成执行。如果未升级而生成解决方案,则会显示MSBuild错误消息。这就解释了为什么后续尝试会起作用(解决方案只需升级一次)。

    Piping-devenv修复了此问题:

    & $DevenvExe $SolutionPath /upgrade | Out-Null
    

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

        2
  •  0
  •   gvee    8 年前

    环境变量,毫无疑问!

    以PS为单位;环境变量在 开始 您的会话。

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

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