【问题标题】:vsvars32.bat in Visual Studio 2017Visual Studio 2017 中的 vsvars32.bat
【发布时间】:2017-08-05 22:48:04
【问题描述】:

由于 Visual Studio 安装程序是 Visual Studio 2017 版本的新安装程序,我无法找到 Visual C++ 组件,解释为 here

如何继续在 VS2017 中获取 vsvars32.bat

【问题讨论】:

    标签: visual-studio-2017


    【解决方案1】:

    VS2017 的安装路径位置选择严重受损。他们所做的最愚蠢的事情是让版本名称(专业版、企业版,可能是社区版)成为路径的一部分。这使得很难从一台机器可靠地找到工具返回到另一台机器。

    我认为有一个环境变量可以解决这个问题,VSAPPIDDIR 变量存储了安装 IDE 的文件夹(devenv.exe)的路径。因此,如果您想从构建事件中运行 vcvars32.bat,那么您可以使用

       call "%vsappiddir%..\..\VC\Auxiliary\Build\vcvars32.bat" x86
    

    注意是vc,不是vs,vsvars32.bat已经不存在了。您可能会喜欢“开发人员命令提示符:

       call "%vsappiddir%..\tools\vsdevcmd.bat"
    

    但从您的链接来看,您实际上想要运行 editbin.exe 实用程序:

       "%vsappiddir%..\..\VC\Tools\MSVC\14.10.25017\bin\HostX86\x86\editbin.exe" args...
    

    14.10.25017 版本号也让人不高兴,对于从一个更新到下一个更新将如何变化没有真正的洞察力。应该会的。

    【讨论】:

    • 或者,您可以使用vswhere 实用程序来查找“appdir”。
    • 刚安装VS 2017,没有定义%VSAPPIDDIR%。无赖。
    • 仅供参考:如果您正在寻找 editbin.exe,您会在名为:VC++ 2017 v141-Toolset (x86, x64)
    • “使版本名称(Professional、Enterprise,可能是 Community)成为路径的一部分” - 即允许多个版本在同一台机器上共存。以前,这是不可能的,因为路径相同 - 它们以不可预知的方式相互破坏。
    • @Vera: 变量 %VSAPPIDDIR% 不是 系统 环境变量,仅在脚本被称为 PreBuildEvent 时可用。 @Hans:好像相当于set DEVENVDIR=%~5
    【解决方案2】:

    我知道这个问题已经(很好)回答了,但我想分享一下我是如何解决这个问题的,希望它能帮助人们谷歌搜索寻找解决方案

    @echo off
    
    set INSTALLPATH=
    
    if exist "%programfiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
      for /F "tokens=* USEBACKQ" %%F in (`"%programfiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -version 15.0 -property installationPath`) do set INSTALLPATH=%%F
    )
    
    echo INSTALLPATH is "%INSTALLPATH%"
    
    REM Save current dir for later
    pushd %CD%
    
    if NOT "" == "%INSTALLPATH%" (
      call "%INSTALLPATH%\Common7\Tools\VsDevCmd.bat"
    ) else (
      goto ERROR_NO_VS15
    )
    
    :WORK
    REM Retrieve the working dir and proceed
    popd
    echo Doing work in %CD%
    svcutil this_is_just_an_example
    goto END
    
    :ERROR_NO_VS15
    echo Visual Studio 2017 Tools Not Available!
    
    :END
    echo Processing ends.
    

    上面脚本的一个小解释。

    vswhere.exe 是一个单文件的本机可执行文件,您可以下载或使用构建和部署环境重新分发,以找到 Visual Studio 或使用 Visual Studio 2017 新安装程序安装的其他产品(来自vswhere wiki)

    从 Visual Studio 15.2(26418.1 预览版)开始,vswhere.exe 安装在 %ProgramFiles(x86)%\Microsoft Visual Studio\Installer 中(在 Windows 10 之前的 32 位程序中使用 %ProgramFiles%)。这是一个将被维护的固定位置(如 here 所述)

    这允许开发人员查询 Visual Studio 2017(及更高版本)安装的几个重要功能。此外,该工具旨在允许在同一台计算机上安装不同风格的 Visual Studio(Community Edition、Professional 等)。

    您可以找到几个使用示例here

    至于脚本,第一个相关部分

    if exist "%programfiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
      for /F "tokens=* USEBACKQ" %%F in (`"%programfiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -version 15.0 -property installationPath`) do set INSTALLPATH=%%F
    )
    

    查询 vswhere 获取 Visual Studio 2017 (-version 15.0) 的安装路径,并设置一个名为 INSTALLPATH 的变量。

    需要注意的是,在 32 位操作系统上,您应该使用 %programfiles% 而不是 %programfiles(x86)%。

    由于这个issue,脚本会保存当前目录以供以后检索。

    然后脚本继续测试 INSTALLPATH 变量的内容。如果变量不是,它会附加“Common7\Tools\VsDevCmd.bat”(这是一个众所周知的相对路径,可以在其中找到用于相应的 Visual Studio 安装)。否则,脚本会跳转到错误消息并退出(您可以选择返回非零错误代码)。

    如果一切顺利,您现在可以使用完整的 Visual Studio 开发环境。

    脚本现在继续检索 original 目录并执行某些操作,在本例中是对 svcutil 的虚拟调用。

    【讨论】:

    • 它可以通过注释来说明它的作用以及我们应该何时运行它。
    • @SteveSmith,我添加了一些关于脚本使用的 cmets 并引用了一些对我有帮助的资源。我希望这会使贡献对其他人更有用。
    • 这太棒了。谢谢你。这应该是公认的答案。
    • 很好的答案。对于那些喜欢简洁的人,以下内容就足够了:for /F "tokens=* USEBACKQ" %%F in (`"%PROGRAMFILES(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -property installationPath`) do set VSPATH=%%F 后跟 call "%VSPATH%\Common7\Tools\VsDevCmd.bat"
    • @rolls,要检测最新版本,您可以尝试运行类似以下内容:vswhere.exe" -legacy -latest -version [11.0,16.0) -property installationPath。这将为您提供最新 Visual Studio 版本(包括旧版本)的安装路径,从 11.0(包括)到 16.0(不包括)。如果您只需要“最新”,而不必担心旧版本,只需运行vswhere.exe" -latest -property installationPath
    【解决方案3】:

    只需将“vsvars32.bat”更改为“vsdevcmd.bat”即可。这至少兼容 VS2015。

    call "$(DevEnvDir)..\tools\vsdevcmd.bat"
    editbin /largeaddressaware "$(TargetPath)"
    

    【讨论】:

    • DevEnvDir 在通过 VisualStudio 构建时设置,但从命令行构建时不设置
    • 如果您从命令行构建,则只需使用“开始”菜单中提供的快捷方式自行运行 vsdevcmd.bat。简单的方法。仅当您需要在构建事件中执行此操作时才会复杂。
    【解决方案4】:

    微软在 VS 2017 中将 vcvars32.bat 更改为 VsDevCmd.bat link

    我在 pre-build(项目属性->构建事件)中使用 vcvars32.bat,所以对我来说,我已经改变了:
    "$(DevEnvDir)..\..\VC\bin\vcvars32.bat"

    $(DevEnvDir)\..\Tools\VsDevCmd.bat"
    并且成功了!

    编辑: 在 Visual Studio 15.9 中,路径已更改(如 Fütemire 所说 在评论中),所以我不得不改变:
    $(DevEnvDir)\..\Tools\VsDevCmd.bat"
    到:
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat

    *您可以创建一个环境变量来存储路径。我找不到已经定义的。

    【讨论】:

    • 您提到的路径似乎来自 Visual Studio 2015 (Microsoft Visual Studio 14.0)。
    • 首选call "$(DevEnvDir)\..\Tools\VsDevCmd.bat" - 否则你有一个“在我的机器上工作”的解决方案。
    • 不幸的是,从 VS 2017 v15.9 开始,Tools 目录被上移了一级,因此 $(DevEnvDir) 宏不再起作用,它太远了。我真的希望他们停止移动这些目录。更好的是,他们应该直接将 env 变量和宏直接放到 tools 目录中,无论他们决定将其放在哪里。
    【解决方案5】:

    上述解决方案均不适合我。在从“vsvars32.bat 缺失”错误中恢复过来后 - 我浏览了每一行,但也缺少“svcutil.exe”。

    我想解决这个问题,它奏效了。我在我的机器中获得了 SvcUtil.exe 的以下路径:

    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin

    我在系统环境变量中设置了路径并重新启动了我的 Visual Studio,以防万一,它工作了。

    希望这对某人有所帮助!

    编辑: 非常奇怪 - 当我启用“轻量级解决方案负载”时它可以工作。一旦我禁用“轻量级解决方案负载” - 它就会开始给我同样的错误!

    【讨论】:

    • 您能解释一下SvcUtil.exe 或它的路径如何帮助找到vsvars32.bat 吗?我没有看到问题和您的答案之间的联系...
    【解决方案6】:

    在 Visual Studio 2017(安装了inkl.C++ 构建工具)中,我在构建后事件中以这种方式执行此操作,以检查 x86:

    if not $(PlatformName) == x64 (
    if exist "$(DevEnvDir)..\tools\vsdevcmd.bat" (
    echo setting largeaddressaware to get 4gb access in 32 bit
    
    call "$(DevEnvDir)..\tools\vsdevcmd.bat"
    editbin /largeaddressaware "$(TargetPath)"
    )
    )
    

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 2017-04-03
      • 2018-07-20
      • 2018-08-23
      • 2017-09-05
      • 1970-01-01
      相关资源
      最近更新 更多