Как программно получить путь к MSBuild с компьютера, на котором запущен мой .exe?
Я могу получить версию .NET из среды, но есть ли способ получить правильную папку для версии .NET?
Ковыряясь в реестре, похоже
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
может быть то, что вы после; запустите regedit.exe и посмотрите.
reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath
dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\
Вы также можете распечатать путь MSBuild.exe в командной строке:
источник
/reg:32
или/reg:64
обе эти функцииcmd
(или любой процесс, который вы выполняете), чтобы явно получить этот путь.Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath
Если вы хотите использовать MSBuild для .Net 4, вы можете использовать следующую команду PowerShell, чтобы получить путь к исполняемому файлу. Если вы хотите версию 2.0 или 3.5, просто измените переменную $ dotNetVersion.
Для запуска исполняемого файла вам необходимо добавить переменную $ msbuild с &. Это будет выполнять переменную.
источник
$dotNetVersion
12.0 (против 2013) и 14.0 (против 2015) (если установлено, конечно)HKLM:\software\Microsoft\MSBuild\ToolsVersions
ключ. Вместо этого вам нужно получить установочный каталог VS2017HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7\15.0
, а затем добавить,MSBuild\15.0\Bin\MSBuild.exe
чтобы получить расположение MSBuild EXE.Для сценариев оболочки cmd в Windows 7 я использую следующий фрагмент в моем пакетном файле, чтобы найти MSBuild.exe в .NET Framework версии 4. Я предполагаю, что версия 4 присутствует, но не принимаю подверсию. Это не совсем общее назначение, но для быстрых сценариев это может быть полезно:
Для моего использования я выхожу из командного файла с ошибкой, если это не сработало:
источник
set bb.build.msbuild.exe=
? Это требуется или просто артефакт вашей установки?Вы можете использовать эту пробную Команду PowerShell, чтобы получить
MSBuildToolsPath
из реестра.PowerShell (из реестра)
Вывод
или из файловой системы
PowerShell (из файловой системы)
Вывод
источник
Инструкция по поиску MSBuild :
&"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
Инструкция по поиску VSTest :
&"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.PackageGroup.TestTools.Core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.PackageGroup.TestTools.Core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
(Обратите внимание, что приведенные выше инструкции немного изменены по сравнению с официальными инструкциями Microsoft. В частности, я включил
-prerelease
флаг, позволяющий выбирать установки Preview и RC, а также-products *
обнаруживать установки Visual Studio Build Tools.)Это заняло всего два года, но, наконец, в 2019 году Microsoft прослушала и дала нам возможность найти эти важные исполняемые файлы ! Если у вас установлена Visual Studio 2017 и / или 2019,
vswhere
утилиту можно запросить для определения местоположения MSBuild et al. Посколькуvswhere
он всегда находится по адресу%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
, он не требует начальной загрузки и не требует жесткого кодирования пути.Волшебство - это
-find
параметр, добавленный в версии 2.6.2 . Вы можете определить версию, которую вы установили, запустивvswhere
или проверив его свойства файла. Если у вас более старая версия, вы можете просто загрузить последнюю и перезаписать существующую%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
.vswhere.exe
Это автономный исполняемый файл, поэтому вы можете скачать и запустить его из любого места, где есть подключение к Интернету. Это означает, что ваши сценарии сборки могут проверить, правильно ли настроена среда, в которой они работают, чтобы назвать одну опцию.источник
msbuild
в командной строке (особенно в командной строке Visual Studio, если она используется), то это тот, который будет использоваться. Для того, чтобы увидеть , что привыкает , если вы вводитеmsbuild
в командной строке, сделайте следующее:where msbuild
. Если это не сообщает то же самое, что VSWHERE говорит, что последний и самый лучший из них, то либо вы должны указать полный путь к тому, которыйmsbuild.exe
вы хотите использовать, либо внести изменения в переменные PATH в соответствии с вашими потребностями.@AllenSanborn имеет отличную версию PowerShell, но у некоторых есть требование использовать только сборочные сценарии для сборок.
Это прикладная версия ответа @ bono8106.
msbuildpath.bat
build.bat
Для Visual Studio 2017 / MSBuild 15 Азиз Атиф (парень, который написал Элму ) написал пакетный скрипт
https://github.com/linqpadless/LinqPadless/blob/master/build.cmd
источник
Это работает для Visual Studio 2015 и 2017:
источник
vswhere -products *
, как указано в github.com/Microsoft/vswhere/wiki/Find-MSBuild .Расположение реестра
укажите место для исполняемого файла.
Но если вам нужно место, где сохранить расширения задач, он включен
источник
Самый простой способ - открыть PowerShell и ввести
источник
Однострочник, основанный на ответе @ dh_cgn :
(Resolve-Path ([io.path]::combine(${env:ProgramFiles(x86)}, 'Microsoft Visual Studio', '*', '*', 'MSBuild', '*' , 'bin' , 'msbuild.exe'))).Path
Он выбирает все существующие пути, например.
C:\Program Files (x86)\Microsoft Visual Studio\*\*\MSBuild\*\bin\msbuild.exe
,Звезды подстановочных знаков:
Помните, что эта команда выбирает первый путь, который соответствует выражению, упорядоченному по алфавиту. Чтобы сузить его, просто замените шаблоны с конкретными элементами, например. год или версия инструмента.
источник
В Windows 2003 и более поздних версиях введите эту команду в cmd:
Если ничего не появляется, это означает, что .NET Framework не включен в системный PATH. MSBuild должен находиться в папке установки .NET вместе с компиляторами .NET (vbc.exe, csc.exe)
источник
Начиная с MSBuild 2017 (v15), MSBuild теперь устанавливается в папке в каждой версии Visual Studio
Вот несколько примеров, где MSBuild.exe находится на моей машине:
источник
Чтобы получить путь к msbuild 15 (Visual Studio 2017) с пакетом из реестра без дополнительных инструментов:
Лучше доступные инструменты:
источник
Вы не думаете, что здесь есть что добавить, но, возможно, пришло время для единого способа сделать это во всех версиях. Я объединил подход с запросом реестра (VS2015 и ниже) с использованием vswhere (VS2017 и выше), чтобы придумать это:
источник
Есть много правильных ответов. Тем не менее, здесь используется One-Liner в PowerShell, который используется для определения пути MSBuild для самой последней версии :
источник
-last 1
(вместо-first 1
того, чтобы получить последнюю версию), а также объединяю имя файла (чтобы правильно получить полный путь, а не только папку).Этот метод powershell получает путь к msBuild из нескольких источников. Пытаюсь по порядку:
Сначала используйте vswhere (потому что Visual Studio, кажется, имеет более свежие версии msBuild), например
Если не найдено, попробуйте реестр (версия фреймворка), например
Код Powershell:
источник
Для Visual Studio 2017, не зная точного издания, вы можете использовать это в пакетном скрипте:
Команда findstr игнорирует некоторые исполняемые файлы msbuild (в данном примере amd64).
источник
добавьте ветку vswhere для https://github.com/linqpadless/LinqPadless/blob/master/build.cmd , отлично работает на моем компьютере, а ветка vswhere работает на компьютере моего помощника. Может быть, ветвь vswhere должна двигаться вперед как первая проверка.
источник
Если вы любите приключения, вы также можете получить исходный код и последнюю версию MsBuild от GitHub прямо сейчас по адресу https://github.com/Microsoft/msbuild/releases/.
источник
Получить последнюю версию MsBuild. Лучший способ для всех типов установки msbuild для разных процессорных архитектур (Power Shell):
источник
Если вы хотите скомпилировать проект Delphi, посмотрите на «ОШИБКА MSB4040 Нет цели в проекте» при использовании msbuild + Delphi2009
Правильный ответ там сказал: «Есть пакетный файл с именем rsvars.bat (найдите его в папке RAD Studio). Вызовите его перед вызовом MSBuild, и он установит необходимые переменные среды. Убедитесь, что в rsvars правильные папки .bat, если у вас есть компилятор в другом месте по умолчанию. "
Эта bat не только обновит переменную среды PATH до нужной папки .NET с правильной версией MSBuild.exe, но и зарегистрирует другие необходимые переменные.
источник