我需要编写一个批处理文件来完成Visual Studio中的预构建步骤。作为其中的一部分,我需要调用Visual Studio Developer命令提示符。
我知道对于VS2015,开发人员命令提示符位于C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat
。
不幸的是,我们的构建服务器有不同版本的VS.是否有一种简单的方法可以在批处理文件中为所有(或大多数)Visual Studio版本找到最新的VSDevCmd.bat
,因此预构建步骤适用于两种环境?
答案 0 :(得分:1)
您应使用Microsoft Visual Studio安装程序提供的vswhere。您将vswhere.exe
复制到已知位置。 Wiki在how to start the developer command prompt上有描述:
@if not defined _echo echo off
for /f "usebackq delims=" %%i in (`vswhere.exe -prerelease -latest -property installationPath`) do (
if exist "%%i\Common7\Tools\vsdevcmd.bat" (
%comspec% /k "%%i\Common7\Tools\vsdevcmd.bat" %*
exit /b
)
)
rem Instance or command prompt not found
exit /b 2
答案 1 :(得分:0)
我设法凑齐了一个查看参数的批处理文件,然后在文件系统中试图弄清楚应该使用什么版本的VSDevCmd。 $(DevEnvDir)
有时是*Undefined*
,因此我们也需要检查一下。
在VS2015 Professional,VS2017 Professional和VS2017 Enterprise上测试。
REM Usage in VS build event: call "$(SolutionDir)\find_vsdevcmd.bat" "$(DevEnvDir)"
SET vsversion=
REM Get Visual Studio version, either from command prompt, or newest on filesystem
if [%1] == [] (
if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2017 Enterprise"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2017 Professional"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2017 Community"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2015"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2013"
) else goto :eof
) else if [%1] == ["*Undefined*"] (
if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2017 Enterprise"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2017 Professional"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2017 Community"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2015"
) else if exist "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat" (
SET vsversion="VS2013"
) else goto :eof
) else (
if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\"] (
SET vsversion="VS2017 Enterprise"
) else if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\"] (
SET vsversion="VS2017 Professional"
) else if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\"] (
SET vsversion="VS2017 Community"
) else if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\" (
SET vsversion="VS2015"
) else if [%1] == ["C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\" (
SET vsversion="VS2013"
) else goto :eof
)
if %vsversion% == "VS2017 Enterprise" (
SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
ECHO VS2017 Enterprise
) else if %vsversion% == "VS2017 Professional" (
SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\Tools\VsDevCmd.bat"
ECHO VS2017 Professional
) else if %vsversion% == "VS2017 Community" (
SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat"
ECHO VS2017 Community
) else if %vsversion% == "VS2015" (
SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat"
ECHO VS2015
) else if %vsversion% == "VS2013" (
SET vsdevcmd="C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat"
ECHO VS2013
) else goto :eof
call %vsdevcmd%