Ответ 1
Microsoft создала инструмент для поиска местоположения Visual Studio 2017 и нового https://github.com/Microsoft/vswhere
Этот параметр и новее описываются в этом сообщении в блоге.
Более ранние версии MSBuild можно найти здесь: %programfiles(x86)%\msbuild\<version>\bin\msbuild.exe.
Но для Visual Studio 2017RC путь %programfiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe
. Тип установки: enteprise, сообщество или профессионал, кажется, является частью пути. И это затрудняет указание правильного пути к msbuild в BAT файле, который должен работать на разных компьютерах с разными версиями Visual Studio 2017.
Каков наилучший способ вызвать версию Visual Studio 2017 RC Msbuild из файла bat? Или из PowerShell?
Microsoft создала инструмент для поиска местоположения Visual Studio 2017 и нового https://github.com/Microsoft/vswhere
Этот параметр и новее описываются в этом сообщении в блоге.
VS2017 имеет встроенный API, который позволяет запрашивать информацию о том, какие экземпляры VS2017 установлены. Там пакет NuGet для него и даже образец как запросить, включая путь установки. Для потребления в пакетном или PS файле вы можете просто переписать пример приложения и вызвать его из своего script для вывода необходимой вам информации.
Механизм установки VS сохраняет хранилище своих данных в %ProgramData%\Microsoft\VisualStudio\Packages\_Instances
. Будет папка для каждого экземпляра VS2017, а внутри этой папки находится файл state.json
, содержащий информацию об этой установке, включая путь установки.
Поскольку вам нужно извлечь информацию из файла .json, вы можете либо написать приложение, которое вы вызываете из своего файла script, либо придумать логику синтаксического анализа непосредственно в script. Это, очевидно, будет хрупким, поскольку может измениться схема JSON или местоположение файла.
Предполагая, что вы используете путь установки по умолчанию, вы можете просто рекурсивно искать msbuild.exe под %ProgramFiles(x86)%\Microsoft Visual Studio\
(похоже, что для каждого экземпляра VS будет 32-разрядный и 64-разрядный файл msbuild.exe). Это, вероятно, было бы проще всего сделать в вашем файле script, но он полагается на путь установки по умолчанию (или какой-либо жесткий путь, который вы хотите найти).
Последнее, что вы можете сделать, - это потребовать, чтобы разработчики использовали (или каким-то образом) использовать vsdevcmd.bat
для использования среды VS dev. Это даст им MSBuild и, кроме того, любые другие инструменты из среды VS, на их% PATH%. Это действительно необходимо для вашей команды разработчиков, но всегда будет официально поддерживаться в поиске msbuild.exe.
Простейший способ...
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe
Теперь, когда VS 2017 был выпущен, подумал, что было бы полезно добавить мои 2 цента:
Создание командного файла:
Открыть блокнот
Скопируйте следующее и вставьте в блокнот, заменив решение, которое вы хотите построить, с помощью [My Solution Name Here]:
@echo off
:variables
SET msBuildLocation="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe"
SET solutionDirectory=[My Solution Location Here]
SET batchFileLocation=[BatchFileLocation Here]
cd %solutionDirectory%
echo Building MS files for [My Solution Name Here].
call %msBuildLocation% [My Solution Name].sln /p:Configuration=Debug /m:4 /v:M /fl /flp:LogFile=msbuild.log;Verbosity=Normal /nr:false /consoleloggerparameters:Summary;ShowTimestamp;ShowEventId;PerformanceSummary
echo -
echo --------Done building [My solution name here].--------------
echo -
cd %batchFileLocation%
Сохраните пакетный файл так, как хотите, с расширением .bat. Обязательно выберите все файлы вместо .txt, иначе он не будет работать. Вызовите командный файл, выпустив команду cd, где вы ее сохранили, и она должна работать. Или просто дважды щелкните. Готово.
Обратите внимание, что моя версия visual studio - это сообщество; вам нужно будет заменить путь соответствующей версией.
Я также запускаю инструменты сборки из файла bat на моем CI-сервере: новое местоположение, которое я нашел, следующее:
% программных файлов (x86)%\Microsoft Visual Студия\2017\инструмент сборки \MSBuild\15.0\Bin\msbuild.exe
Если вы установили предварительный просмотр инструментов .NET Core 3 или более поздней версии, CLI dotnet
должен быть доступен по %PATH%
по умолчанию (даже если вы не строите проект .NET Core), поэтому вы можете попробуйте dotnet msbuild
. Ref https://github.com/dotnet/docs/blob/master/docs/core/preview3/tools/dotnet-msbuild.md
Проводка этого для людей, которые все еще пытаются найти более новые версии msbuild. Я нахожу, что этот фрагмент powershell делает трюк, который легко может быть вызван из файла bat.
Function Find-MsBuild([int] $MaxVersion = 2017)
{
$agentPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\msbuild.exe"
$devPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe"
$proPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild.exe"
$communityPath = "$Env:programfiles (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\msbuild.exe"
$fallback2015Path = "${Env:ProgramFiles(x86)}\MSBuild\14.0\Bin\MSBuild.exe"
$fallback2013Path = "${Env:ProgramFiles(x86)}\MSBuild\12.0\Bin\MSBuild.exe"
$fallbackPath = "C:\Windows\Microsoft.NET\Framework\v4.0.30319"
If ((2017 -le $MaxVersion) -And (Test-Path $agentPath)) { return $agentPath }
If ((2017 -le $MaxVersion) -And (Test-Path $devPath)) { return $devPath }
If ((2017 -le $MaxVersion) -And (Test-Path $proPath)) { return $proPath }
If ((2017 -le $MaxVersion) -And (Test-Path $communityPath)) { return $communityPath }
If ((2015 -le $MaxVersion) -And (Test-Path $fallback2015Path)) { return $fallback2015Path }
If ((2013 -le $MaxVersion) -And (Test-Path $fallback2013Path)) { return $fallback2013Path }
If (Test-Path $fallbackPath) { return $fallbackPath }
throw "Yikes - Unable to find msbuild"
}