【发布时间】:2017-08-05 22:48:04
【问题描述】:
由于 Visual Studio 安装程序是 Visual Studio 2017 版本的新安装程序,我无法找到 Visual C++ 组件,解释为 here。
如何继续在 VS2017 中获取 vsvars32.bat?
【问题讨论】:
由于 Visual Studio 安装程序是 Visual Studio 2017 版本的新安装程序,我无法找到 Visual C++ 组件,解释为 here。
如何继续在 VS2017 中获取 vsvars32.bat?
【问题讨论】:
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 版本号也让人不高兴,对于从一个更新到下一个更新将如何变化没有真正的洞察力。应该会的。
【讨论】:
PreBuildEvent 时可用。 @Hans:好像相当于set DEVENVDIR=%~5
我知道这个问题已经(很好)回答了,但我想分享一下我是如何解决这个问题的,希望它能帮助人们谷歌搜索寻找解决方案
@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 的虚拟调用。
【讨论】:
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"
vswhere.exe" -legacy -latest -version [11.0,16.0) -property installationPath。这将为您提供最新 Visual Studio 版本(包括旧版本)的安装路径,从 11.0(包括)到 16.0(不包括)。如果您只需要“最新”,而不必担心旧版本,只需运行vswhere.exe" -latest -property installationPath。
只需将“vsvars32.bat”更改为“vsdevcmd.bat”即可。这至少兼容 VS2015。
call "$(DevEnvDir)..\tools\vsdevcmd.bat"
editbin /largeaddressaware "$(TargetPath)"
【讨论】:
微软在 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
*您可以创建一个环境变量来存储路径。我找不到已经定义的。
【讨论】:
Microsoft Visual Studio 14.0)。
call "$(DevEnvDir)\..\Tools\VsDevCmd.bat" - 否则你有一个“在我的机器上工作”的解决方案。
Tools 目录被上移了一级,因此 $(DevEnvDir) 宏不再起作用,它太远了。我真的希望他们停止移动这些目录。更好的是,他们应该直接将 env 变量和宏直接放到 tools 目录中,无论他们决定将其放在哪里。
上述解决方案均不适合我。在从“vsvars32.bat 缺失”错误中恢复过来后 - 我浏览了每一行,但也缺少“svcutil.exe”。
我想解决这个问题,它奏效了。我在我的机器中获得了 SvcUtil.exe 的以下路径:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
我在系统环境变量中设置了路径并重新启动了我的 Visual Studio,以防万一,它工作了。
希望这对某人有所帮助!
编辑: 非常奇怪 - 当我启用“轻量级解决方案负载”时它可以工作。一旦我禁用“轻量级解决方案负载” - 它就会开始给我同样的错误!
【讨论】:
SvcUtil.exe 或它的路径如何帮助找到vsvars32.bat 吗?我没有看到问题和您的答案之间的联系...
在 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)"
)
)
【讨论】: