Общей проблемой является поиск места установки , когда мы знаем, какую версию мы ищем.Так как здесь вы также спрашиваете о различных версиях , я думаю, что у вас нет правильного пути, и вам нужно будет использовать один из вариантов.
Объявление на машине
СкриптАргументы
Как сказал Ланс Ли-MSFT в своем ответе, вы можете создать скрипт, который принимает пути в качестве параметров и решает, какой из них использовать.
Я думаю, что недостаток этого решения в том, что оно подходит только для процесса CI, и его сложно запустить на машине разработчика.И вам все равно нужно найти путь на каждой машине.
Переменные среды
Другой вариант - сохранить пути установки в переменных среды и использовать их в сценарии.
Переменные среды должны быть установлены один раз при установке Visual Studio или при создании виртуальной машины, и скрипт получит к ним доступ столько, сколько пожелает.
Нам все еще нужно определить пути как переменные среды в машине разработки .Если у вас много разработчиков - это значит много писем.
Объявление скриптом
Поскольку не будет бесконечного списка путей установки, я бы порекомендовал поискать существующийпуть при запуске сценария .
Это выглядит немного плохо, когда вы смотрите на файл, но помните, что список окончательный и определен в одном месте ,и нет никаких недостатков, которые мы описали в других опциях.
Примеры
Вот пример поиска Командная строка разработчика для VS 17 , для машины для разработки (Enterprise
, Professional
) и машины CI (BuildTools
).
Кстати, он добавляет в переменные среды все виды важных вещейнапример, путь к msbuild
и т. д.
.bat
:
@echo off
if NOT DEFINED VSINSTALLDIR goto SetVars
echo VSINSTALLDIR already set to %VSINSTALLDIR%
goto :eof
:SetVars
if EXIST "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise" goto :Enterprise
if EXIST "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional" goto :Professional
if EXIST "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools" goto :Docker
echo VS2017 is not installed on this machine
goto :eof
:Enterprise
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\enterprise\common7\tools\VsDevCmd.bat"
goto :eof
:Docker
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\BuildTools\common7\tools\VsDevCmd.bat"
goto :eof
:Professional
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\common7\tools\VsDevCmd.bat"
:eof
msbuild
script :
<VsDevCmd Condition="Exists('C:\Program Files (x86)\Microsoft Visual Studio\2017\enterprise\common7\tools\VsDevCmd.bat')">
"C:\Program Files (x86)\Microsoft Visual Studio\2017\enterprise\common7\tools\VsDevCmd.bat"</VsDevCmd>
<VsDevCmd Condition="Exists('C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\common7\tools\VsDevCmd.bat')">
"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\common7\tools\VsDevCmd.bat"</VsDevCmd>
<VsDevCmd Condition="Exists('C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\common7\tools\VsDevCmd.bat')">
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\common7\tools\VsDevCmd.bat"</VsDevCmd>