vsvars32.bat в Visual Studio 2017

Поскольку установщик Visual Studio является новым из версии Visual Studio 2017, я не могу найти компонент Visual C ++, объяснил здесь.

Как мне получить vsvars32.bat в VS2017?


person Tobias Moe Thorstensen    schedule 15.03.2017    source источник


Ответы (6)


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 тоже не доставляет никакой радости, никакого реального понимания того, как это будет меняться от одного обновления к другому. Вероятно, так и будет.

person Hans Passant    schedule 15.03.2017
comment
В качестве альтернативы вы можете использовать утилиту vswhere, чтобы найти каталог приложений. - person Christian.K; 16.03.2017
comment
Только что установил VS 2017, а% VSAPPIDDIR% не определен. Облом. - person Eddie Paz; 17.05.2017
comment
К сведению: если вы ищете editbin.exe, вы найдете его в пакете установщика Visual Studio с именем: VC ++ 2017 v141-Toolset (x86, x64) - person Sebastian Schumann; 12.07.2017
comment
это не сработало для меня в VS 2017, @Hans, не могли бы вы обновить свой ответ действительной командой? - person Ehsan Sajjad; 11.10.2017
comment
Никто мне не говорит, почему у них это не работает. Я предполагаю, что они не пытаются сделать это из события сборки. Если вы не делаете этого из события сборки, просто используйте ярлык командной строки разработчика, чтобы правильно настроить среду. - person Hans Passant; 11.10.2017
comment
сделайте название редакции (Professional, Enterprise, возможно Community) частью пути - это позволит нескольким редакциям сосуществовать на одной машине. Раньше это было невозможно из-за одинаковых путей - они непредсказуемо ломали друг друга. - person ivan_pozdeev; 22.10.2017
comment
@Vera: переменная% VSAPPIDDIR% НЕ является системной переменной среды и доступна только тогда, когда скрипт вызывается как PreBuildEvent. @Hans: Это похоже на set DEVENVDIR=%~5 - person Jack Miller; 16.11.2017
comment
При использовании Visual Studio 2019 номер версии изменился на 14.21.27702, поэтому ..\..\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)%.

Из-за этой проблемы , сценарий сохраняет текущий каталог для последующего использования.

Затем сценарий переходит к проверке содержимого переменной INSTALLPATH. Если переменная не пуста, она добавляет к ней «Common7 \ Tools \ VsDevCmd.bat» (это хорошо известный относительный путь, по которому можно найти инструменты разработки для соответствующая установка Visual Studio). В противном случае сценарий переходит к сообщению об ошибке и завершает работу (вы можете выбрать возврат ненулевого кода ошибки).

Если все пойдет хорошо, теперь в вашем распоряжении полноценная среда разработки Visual Studio.

Теперь сценарий переходит к извлечению оригинального каталога и выполняет что-то, в данном случае фиктивный вызов svcutil.

person jamars    schedule 09.02.2018
comment
Это может быть комментарий о том, что он делает и когда его следует запускать. - person Steve Smith; 03.04.2018
comment
@SteveSmith, я добавил несколько комментариев по использованию скрипта и сослался на некоторые ресурсы, которые мне помогли. Я надеюсь, что это сделает мой вклад более полезным для других. - person jamars; 05.04.2018
comment
Это отлично. Спасибо. Это должен быть принятый ответ. - person Webreaper; 27.07.2018
comment
Отличный ответ. Для тех, кто любит быть кратким, будет достаточно следующего: 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
comment
Что делать, если у вас установлено несколько экземпляров VS, как я могу изменить этот цикл for для обнаружения последней версии? - person rolls; 14.11.2019
comment
@rolls, чтобы определить последнюю версию, вы можете попробовать запустить что-то вроде следующего: 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
comment
Отлично спасибо. Я не смог найти ни одной версии между x и y, которую вы разместили в документации (возможно, я ее пропустил). - person rolls; 15.11.2019
comment
@jamars, который не работает, если у вас установлена ​​только предварительная версия VS2019. Предварительный просмотр версии 16.0_dfkgjhjdfkjgh и немного руководства в конце. Кажется, что vswhere ошибается и не может соответствовать предварительной версии, поэтому на машинах, на которых установлен только предварительный просмотр, мне пришлось жестко закодировать путь. Не уверен, что есть способ лучше. - person rolls; 04.12.2019
comment
@rolls, у меня никогда не устанавливалась предварительная версия, поэтому у меня нет возможности проверить это, но здесь кто-то упомянул об использовании -prereleaseswitch - person jamars; 04.12.2019

Просто замените vsvars32.bat на vsdevcmd.bat. Это совместимо, по крайней мере, с VS2015.

call "$(DevEnvDir)..\tools\vsdevcmd.bat"
editbin /largeaddressaware "$(TargetPath)"
person flatline    schedule 14.06.2017
comment
DevEnvDir устанавливается при сборке через VisualStudio, но не при сборке из командной строки. - person BrianH; 16.08.2017
comment
Если вы выполняете сборку из командной строки, просто запустите vsdevcmd.bat самостоятельно, используя ярлык, указанный в меню «Пуск». Легкий способ. Это сложно только в том случае, если вам нужно сделать это в событии сборки. - person Hans Passant; 08.04.2018

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

* Вы можете создать переменную среды для хранения пути. Я не смог найти уже определенный.

person fsbflavio    schedule 30.05.2018
comment
Путь, который вы упомянули, похоже, взят из Visual Studio 2015 (Microsoft Visual Studio 14.0). - person Roi Danton; 02.08.2018
comment
Предпочитаю call "$(DevEnvDir)\..\Tools\VsDevCmd.bat" - иначе у вас есть работы над моим машинным решением. - person Nigel Touch; 03.09.2018
comment
К сожалению, в VS 2017 v15.9 каталог 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 на всякий случай, и это сработало.

Надеюсь, это кому-то поможет!

Изменить: Очень странно - он работает, когда у меня включена "Легкая загрузка решения". Как только я отключаю «Легкую загрузку решения» - начинает выдавать ту же ошибку!

person Sunny Sharma    schedule 13.06.2017
comment
Не могли бы вы объяснить, как 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)"
)
)
person howardButcher    schedule 08.03.2019