Поскольку установщик Visual Studio является новым из версии Visual Studio 2017, я не могу найти компонент Visual C ++, объяснил здесь.
Как мне получить vsvars32.bat
в VS2017?
Поскольку установщик Visual Studio является новым из версии Visual Studio 2017, я не могу найти компонент Visual C ++, объяснил здесь.
Как мне получить vsvars32.bat
в VS2017?
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 тоже не доставляет никакой радости, никакого реального понимания того, как это будет меняться от одного обновления к другому. Вероятно, так и будет.
PreBuildEvent
. @Hans: Это похоже на set DEVENVDIR=%~5
- person Jack Miller; 16.11.2017
..\..\VC\Tools\MSVC\14.21.27702\bin\Hostx64\x64\editbin.exe
- person Wollmich; 15.07.2019
Я знаю, что на вопрос (хорошо) дан ответ, но я хотел бы поделиться, как я решил проблему, в надежде, что это поможет людям поискать в Google решение.
@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 (используйте% 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
)
Запрашивает vswhere путь установки Visual Studio 2017 (-версия 15.0) и задает переменную с именем INSTALLPATH.
Следует отметить, что в 32-битной ОС вы должны использовать% programfiles% вместо% programfiles (x86)%.
Из-за этой проблемы em>, сценарий сохраняет текущий каталог для последующего использования.
Затем сценарий переходит к проверке содержимого переменной INSTALLPATH. Если переменная не пуста, она добавляет к ней «Common7 \ Tools \ VsDevCmd.bat» (это хорошо известный относительный путь, по которому можно найти инструменты разработки для соответствующая установка Visual Studio). В противном случае сценарий переходит к сообщению об ошибке и завершает работу (вы можете выбрать возврат ненулевого кода ошибки).
Если все пойдет хорошо, теперь в вашем распоряжении полноценная среда разработки Visual Studio.
Теперь сценарий переходит к извлечению оригинального каталога и выполняет что-то, в данном случае фиктивный вызов 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"
- person Neo; 26.02.2019
vswhere.exe" -legacy -latest -version [11.0,16.0) -property installationPath
. Это даст вам путь для установки последней версии Visual Studio, включая устаревшие, от 11.0 (включительно) до 16.0 (исключая). Если вам просто нужна последняя версия, не беспокоясь об устаревших версиях, просто запустите vswhere.exe" -latest -property installationPath
.
- person jamars; 14.11.2019
-prerelease
switch
- person jamars; 04.12.2019
Просто замените vsvars32.bat на vsdevcmd.bat. Это совместимо, по крайней мере, с VS2015.
call "$(DevEnvDir)..\tools\vsdevcmd.bat"
editbin /largeaddressaware "$(TargetPath)"
Microsoft изменяет vcvars32.bat на VsDevCmd.bat в VS 2017 ссылка
Я использую vcvars32.bat в pre-build (свойства проекта-> события сборки), поэтому для меня я изменил: "$(DevEnvDir)..\..\VC\bin\vcvars32.bat"
на $(DevEnvDir)\..\Tools\VsDevCmd.bat"
< br /> и это сработало!
Изменить: в 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
).
- person Roi Danton; 02.08.2018
call "$(DevEnvDir)\..\Tools\VsDevCmd.bat"
- иначе у вас есть работы над моим машинным решением.
- person Nigel Touch; 03.09.2018
Tools
был перемещен на один уровень вверх, поэтому макрос $ (DevEnvDir) больше не работает, он слишком далеко по пути. Я действительно хочу, чтобы они перестали перемещать эти каталоги. Еще лучше, они должны просто сделать переменную env и макрос прямо в каталог инструментов, куда бы они ни решили поместить их дальше.
- person Fütemire; 15.01.2019
Ни одно из упомянутых решений не помогло мне. После того, как моя голова разогрелась из-за ошибки «vsvars32.bat missing» - я просмотрел каждую строчку, и там тоже было пропало «svcutil.exe».
Я подумал об этом, и это сработало. У меня на компьютере есть следующий путь для SvcUtil.exe:
C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bin
Я установил путь в переменной системной среды и перезапустил Visual Studio на всякий случай, и это сработало.
Надеюсь, это кому-то поможет!
Изменить: Очень странно - он работает, когда у меня включена "Легкая загрузка решения". Как только я отключаю «Легкую загрузку решения» - начинает выдавать ту же ошибку!
SvcUtil.exe
или путь к нему помогает найти vsvars32.bat
? Я не вижу связи между вопросом и вашим ответом ...
- person Jack Miller; 16.11.2017
В 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)"
)
)