vsvars32.bat в Visual Studio 2017
Поскольку установщик Visual Studio является новой версией Visual Studio 2017, я не могу найти компонент Visual C++, объясненный здесь.
Как мне поступить, чтобы получить vsvars32.bat
в VS2017?
5 ответов
VS2017 страдает от очень серьезного повреждения пути установки. Самая чертовски глупая вещь, которую они сделали, - сделать название издания (Professional, Enterprise, вероятно Community) частью пути. Это затрудняет надежный поиск инструментов с одного станка на другой.
Есть одна переменная окружения, которая, я думаю, может решить проблему, 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 тоже не радует, нет реального понимания того, как это изменится от одного обновления к другому. Это вероятно будет.
Я знаю, что на вопрос (хорошо) ответили, но я хотел бы поделиться, как я решил проблему, надеясь, что это поможет людям искать решение проблемы.
@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).
Начиная с Visual Studio 15.2 (предварительный просмотр 26418.1) vswhere.exe устанавливается в папку%ProgramFiles(x86)%\Microsoft Visual Studio\Installer (используйте%ProgramFiles% в 32-разрядной программе до Windows 10). Это фиксированное местоположение, которое будет поддерживаться (как отмечено здесь)
Это позволяет разработчикам запрашивать несколько важных функций установки Visual Studio 2017 (и выше). Кроме того, этот инструмент был разработан для установки на одном компьютере различных версий Visual Studio (Community Edition, Professional, ...).
Вы можете найти несколько примеров использования здесь.
Что касается сценария, первая соответствующая часть
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
)
Запрашивает здесь путь установки Visual Studio 2017 (-version 15.0) и устанавливает переменную с именем INSTALLPATH.
Следует отметить, что в 32-битной ОС вы должны использовать%programfiles% вместо%programfiles(x86)%.
Из-за этой проблемы скрипт сохраняет текущий каталог для последующего извлечения.
Затем скрипт приступает к проверке содержимого переменной INSTALLPATH. Если переменная не пустая, она добавляет к ней "Common7\Tools\VsDevCmd.bat" (это хорошо известный относительный путь, где можно найти инструменты разработки для соответствующей установки Visual Studio). В противном случае скрипт переходит к сообщению об ошибке и завершает работу (вы можете вернуть ненулевой код ошибки).
Если все прошло хорошо, теперь у вас есть полноценная среда разработки Visual Studio.
Сценарий теперь продолжает извлекать исходный каталог и выполнять что-то, в данном случае это фиктивный вызов svcutil.
Просто измените "vsvars32.bat" на "vsdevcmd.bat". Это совместимо, по крайней мере, с VS2015.
call "$(DevEnvDir)..\tools\vsdevcmd.bat"
editbin /largeaddressaware "$(TargetPath)"
Я использую vcvars32.bat в pré-build (свойства проекта->build build), поэтому я изменил:"$(DevEnvDir)..\..\VC\bin\vcvars32.bat"
в $(DevEnvDir)\..\Tools\VsDevCmd.bat"
и это сработало!
Ни одно из упомянутых решений не сработало для меня. После того, как моя голова прогрелась из-за ошибки "vsvars32.bat missing" - я прошел каждую строчку, и там тоже был svcutil.exe.
Я думал об этом, и это сработало. Я получил следующий путь в моей машине для SvcUtil.exe:
C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin
Я установил путь в системной переменной среды и перезапустил Visual Studio на всякий случай, и это сработало.
Надеюсь, это поможет кому-то!
Изменить: Очень странно - это работает, когда у меня включена "Легкая загрузка решения". Как только я отключаю "облегченную загрузку решения" - он начинает выдавать мне ту же ошибку!
В Visual Studio 2017 (установлены инструменты сборки 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)"
)
)