Как получить путь msbuild, возвращаемый из «восстановления nuget.exe» - PullRequest
0 голосов
/ 04 января 2019

Я новичок в использовании git-хуков, и теперь я пытаюсь восстановить пакеты nuget для проектов в моем решении и после этого построить решение. Я создал git hook 'post-merge' и добавил следующий код:

#!/bin/sh
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'

projectRoot="$(git rev-parse --show-toplevel)"
solutionFile="solution.sln"

msBuild="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe"

echo -e "\n${RED}Restoring nuget packages for ${solutionFile}...${NC}"
./nuget.exe restore $projectRoot/development/$solutionFile
echo -e "${GREEN}Done restoring nuget packages for ${solutionFile}.${NC}\n"

echo -e "\n${RED}Building ${solutionFile}...${NC}"
"$msBuild"  $projectRoot/development/$solutionFile
echo -e "${GREEN}Done building ${solutionFile}.${NC}\n"

exit 1

Я добавил выход 1, чтобы я мог проверить свои команды, фактически не тянув проект.

Теперь, после того как я запустил nuget.exe в пути решения, он возвращает путь автообнаружения msbuild, я хочу использовать этот путь для поиска msbuild.exe, чтобы я мог запустить msbuild для решения в зависимости от используемой версии.

Как мне это сделать? И если есть какой-либо способ улучшить или улучшить этот код, пожалуйста, дайте мне знать!

Спасибо!

1 Ответ

0 голосов
/ 05 января 2019

Вместо захвата и анализа выходных данных NuGet вы можете использовать VSWhere для поиска MSBuild .

Со страницы вики:

С обновлением Visual Studio 20172 или более поздней версии, вы можете найти vswhere по адресу% ProgramFiles (x86)% \ Microsoft Visual Studio \ Installer \ vswhere.exe, или чтобы убедиться, что он всегда доступен в вашем репозитории, см. Установка для опции, использующей NuGet.

Пример PowerShell, который вам нужно будет адаптировать к Bash, если вы хотите продолжать использовать bash

$path = vswhere -latest -products * -requires Microsoft.Component.MSBuild -property installationPath
if ($path) {
  $path = join-path $path 'MSBuild\15.0\Bin\MSBuild.exe'
  if (test-path $path) {
    & $path $args
  }
}

РЕДАКТИРОВАТЬ: если у вас установлен .NET Core SDK, выможно просто использовать dotnet msbuild для запуска msbuild, поскольку при установке .NET Core SDK путь dotnet.exe указывается.Единственная реальная разница между использованием Visual Studio MSBuild и .NET Core MSBuild заключается в том, что путь к расширениям будет другим.Но если ваша сборка не зависит от расширения MSBuild, то использование dotnet msbuild работает без необходимости сначала искать путь к исполняемому файлу.

...