Jak mogę programowo uzyskać ścieżkę do MSBuild z komputera, na którym działa mój plik .exe?
Mogę pobrać wersję .NET ze środowiska, ale czy istnieje sposób na uzyskanie odpowiedniego folderu dla wersji .NET?
Wygląda na to, że przeszukuje rejestr
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
może być tym, czego szukasz; odpal regedit.exe i spójrz.
reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath
dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\
Możesz także wydrukować ścieżkę MSBuild.exe do wiersza poleceń:
źródło
/reg:32
albo/reg:64
na obu bitnessess zcmd
(lub cokolwiek przetworzyć używasz), aby wyraźnie się tą drogą.Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath
Jeśli chcesz użyć MSBuild dla .Net 4, możesz użyć następującego polecenia PowerShell, aby uzyskać ścieżkę do pliku wykonywalnego. Jeśli chcesz wersji 2.0 lub 3.5, po prostu zmień zmienną $ dotNetVersion.
Aby uruchomić plik wykonywalny, musisz dodać zmienną $ msbuild do &. To wykona zmienną.
źródło
$dotNetVersion
12.0 (vs 2013) i 14.0 (vs 2015) (jeśli zainstalowano oczywiście)HKLM:\software\Microsoft\MSBuild\ToolsVersions
kluczem. Zamiast tego musisz pobrać katalog instalacyjny VS2017HKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7\15.0
, a następnie dołączyć,MSBuild\15.0\Bin\MSBuild.exe
aby uzyskać lokalizację pliku MSBuild EXE.W przypadku skryptów powłoki cmd w systemie Windows 7 używam następującego fragmentu w pliku wsadowym, aby znaleźć MSBuild.exe w .NET Framework wersja 4. Zakładam, że wersja 4 jest obecna, ale nie zakładam wersji podrzędnej. Nie jest to całkowicie ogólny cel, ale w przypadku szybkich skryptów pomocne może być:
Do moich zastosowań wychodzę z pliku wsadowego z błędem, jeśli to nie działa:
źródło
set bb.build.msbuild.exe=
? Czy jest to wymagane, czy tylko artefakt twojej konfiguracji?Możesz użyć tego bardzo próbnego polecenia PowerShell, aby uzyskać
MSBuildToolsPath
z rejestru.PowerShell (z rejestru)
Wynik
lub z systemu plików
PowerShell (z systemu plików)
Wynik
źródło
Instrukcje dotyczące znalezienia 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
Instrukcje dotyczące znalezienia 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
(Uwaga: powyższe instrukcje zostały nieco zmodyfikowane w stosunku do oficjalnych instrukcji Microsoft. W szczególności zawarłem
-prerelease
flagę, aby umożliwić pobieranie instalacji Preview i RC oraz-products *
wykrywanie instalacji Visual Studio Build Tools).Zajęło to tylko dwa lata, ale w końcu w 2019 roku Microsoft wysłuchał i dał nam sposób na znalezienie tych ważnych plików wykonywalnych ! Jeśli masz zainstalowany
vswhere
program Visual Studio 2017 i / lub 2019, narzędzie można zapytać o lokalizację MSBuild i in. Ponieważvswhere
zawsze znajduje się w%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
, nie ma potrzeby ładowania początkowego i nie jest już wymagane twarde kodowanie ścieżki.Magia to
-find
parametr dodany w wersji 2.6.2 . Możesz ustalić wersję, którą zainstalowałeś, uruchamiającvswhere
lub sprawdzając jej właściwości pliku. Jeśli masz starszą wersję, możesz po prostu pobrać najnowszą i zastąpić istniejącą%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
.vswhere.exe
jest samodzielnym plikiem wykonywalnym, więc możesz go pobrać i uruchomić z dowolnego miejsca, w którym masz połączenie z Internetem. Oznacza to, że skrypty kompilacji mogą sprawdzić, czy środowisko, w którym działają, jest poprawnie skonfigurowane, aby wymienić tylko jedną opcję.źródło
msbuild
w wierszu polecenia (zwłaszcza w wierszu poleceń programu Visual Studio, jeśli go używasz), to ten zostanie wykorzystany. Aby zobaczyć, co przyzwyczaja się po wpisaniumsbuild
w wierszu polecenia, wykonaj następujące czynności:where msbuild
. Jeśli to nie raportuje tak samo jak VSWHERE mówi, że najnowsza i największa jest, to musisz zrobić pełną ścieżkę do tego,msbuild.exe
którego chcesz użyć, lub wprowadzić odpowiednie zmiany w zmiennych PATH.@AllenSanborn ma świetną wersję PowerShell, ale niektórzy ludzie mają obowiązek używania tylko skryptów wsadowych do kompilacji.
To jest zastosowana wersja odpowiedzi @ bono8106.
msbuildpath.bat
build.bat
Dla programu Visual Studio 2017 / MSBuild 15 Aziz Atif (facet, który napisał Elmah ) napisał skrypt wsadowy
https://github.com/linqpadless/LinqPadless/blob/master/build.cmd
źródło
Działa to dla Visual Studio 2015 i 2017:
źródło
vswhere -products *
, jak określono w github.com/Microsoft/vswhere/wiki/Find-MSBuild .Lokalizacje rejestru
podaj lokalizację pliku wykonywalnego.
Ale jeśli potrzebujesz lokalizacji, w której chcesz zapisać rozszerzenia zadań, jest on włączony
źródło
najprostszym sposobem może być otwarcie PowerShell i wejście
źródło
Jednowierszowy oparty na odpowiedzi @ dh_cgn :
(Resolve-Path ([io.path]::combine(${env:ProgramFiles(x86)}, 'Microsoft Visual Studio', '*', '*', 'MSBuild', '*' , 'bin' , 'msbuild.exe'))).Path
Wybiera wszystkie istniejące ścieżki ścieżki np.
C:\Program Files (x86)\Microsoft Visual Studio\*\*\MSBuild\*\bin\msbuild.exe
.Gwiazdy wieloznaczne to:
Pamiętaj, że to polecenie wybiera pierwszą ścieżkę pasującą do wyrażenia uporządkowanego według alfabetu. Aby go zawęzić, po prostu zastąp symbole wieloznaczne określonymi elementami, np. rok lub wersja narzędzi.
źródło
W systemie Windows 2003 i nowszych wpisz to polecenie w cmd:
Jeśli nic się nie pojawi, oznacza to, że środowisko .NET nie jest uwzględnione w ŚCIEŻCE systemu. MSBuild powinien znajdować się w folderze instalacyjnym .NET wraz z kompilatorami .NET (vbc.exe, csc.exe)
źródło
Począwszy od MSBuild 2017 (v15), MSBuild jest teraz instalowany w folderze w każdej wersji programu Visual Studio
Oto kilka przykładów znalezienia pliku MSBuild.exe na moim komputerze:
źródło
Aby pobrać ścieżkę do msbuild 15 (Visual Studio 2017) z partii z rejestru bez dodatkowych narzędzi:
Lepsze dostępne narzędzia:
źródło
Nie pomyślałbyś, że jest tu wiele do dodania, ale być może nadszedł czas na jednolity sposób robienia tego we wszystkich wersjach. Połączyłem podejście kwerendy rejestru (VS2015 i nowsze) z użyciem vswhere (VS2017 i nowsze), aby wymyślić:
źródło
Istnieje wiele poprawnych odpowiedzi. Jednak tutaj One-Liner w PowerShell używam do określenia ścieżki MSBuild dla najnowszej wersji :
źródło
-last 1
(zamiast-first 1
w celu uzyskania najnowszej wersji), a także konkatenuję nazwę pliku (aby poprawnie uzyskać pełną ścieżkę, a nie tylko folder).Ta metoda PowerShell pobiera ścieżkę do msBuild z wielu źródeł. Próbowanie w kolejności:
Najpierw użyj vswhere (ponieważ Visual Studio wydaje się mieć bardziej aktualne wersje msBuild) np
Jeśli nie można znaleźć rejestru (wersja ramowa), np
Kod PowerShell:
źródło
W przypadku programu Visual Studio 2017, nie znając dokładnej wersji, można użyć tego w skrypcie wsadowym:
Polecenie findstr ma zignorować niektóre pliki wykonywalne msbuild (w tym przykładzie amd64).
źródło
dodaj gałąź vswhere dla https://github.com/linqpadless/LinqPadless/blob/master/build.cmd , działa dobrze na moim komputerze, a gałąź vswhere działa na komputerze mojego partnera. Być może gałąź vswhere powinna przejść jako pierwsza kontrola.
źródło
Jeśli masz ochotę na przygodę, możesz również pobrać kod źródłowy i najnowszą wersję MsBuild z GitHub teraz na https://github.com/Microsoft/msbuild/releases/
źródło
Pobierz najnowszą wersję MsBuild. Najlepszy sposób dla wszystkich typów instalacji msbuild dla różnych architektur procesorów (Power Shell):
źródło
Jeśli chcesz skompilować projekt Delphi, spójrz na „BŁĄD MSB4040 W projekcie nie ma celu” przy użyciu msbuild + Delphi2009
Prawidłowa odpowiedź brzmi: „Istnieje plik wsadowy o nazwie rsvars.bat (wyszukaj go w folderze RAD Studio). Zadzwoń do niego przed wywołaniem MSBuild, a skonfiguruje on niezbędne zmienne środowiskowe. Upewnij się, że foldery są poprawne w rsvars .bat, jeśli masz kompilator w innej lokalizacji niż domyślna. "
Ten nietoperz nie tylko zaktualizuje zmienną środowiskową PATH do odpowiedniego folderu .NET z odpowiednią wersją MSBuild.exe, ale także zarejestruje inne niezbędne zmienne.
źródło