Chcę, aby wiersz poleceń do zbudowania konkretnego projektu rozwiązania za pomocą msbuild, tak jak robimy z devenv.com.W devenv.com możemy określić projekt rozwiązania za pomocą następującego wiersza poleceń
devenv.com /Build Release|x86 test.sln /project "testproject"
Korzystając z powyższego wiersza poleceń, mogę zbudować projekt testowy w pliku test.sln przy użyciu devenv.com. Jaka jest linia poleceń dla msbuild dla tego samego rozwiązania.
Dzięki
Odpowiedzi:
Zwróć uwagę, że przypisano
/t
nazwę projektu w rozwiązaniu, która może różnić się od nazwy pliku projektu.Ponadto, jak określono w jak: Tworzenie określonych celów w rozwiązaniach przy użyciu programu MSBuild.exe :
Możesz także tworzyć wiele projektów jednocześnie:
Aby odbudować lub wyczyścić, zmień
/t:project
na/t:project:clean
lub/t:project:rebuild
źródło
/t
parametr dla każdego projektu do zbudowania:msbuild test.sln /t:project /t:project2
/t:SlnFolder\My_Project_name
.Program MSBuild faktycznie działa przy użyciu projektów, a nie rozwiązania. Rozwiązanie jest używane tylko do analizowania go do tymczasowego pliku projektu w programie MSBuild wewnętrznie. Powinno być możliwe po prostu zbudowanie interesującego projektu bezpośrednio za pomocą programu MSBuild, wykonując następujące polecenie.
Jest jeden poważny problem, o którym wiem, że możesz napotkać użycie projektu bezpośrednio zamiast rozwiązania: jeśli używasz rozwiązania do wyrażania zależności między projektami, zamiast dodawać odwołania do projektu i pozwolić systemowi kompilacji automatycznie opracować zależności .
Jeśli wymuszasz kolejność kompilacji za pomocą pliku sln, polecam pracę z tymi zależnościami bezpośrednio w plikach proj i usunięcie ich z sln. Umożliwi to bezpośrednie wywołanie dowolnego pliku proj z programu MSBuild, a wszystkie projekty będą kompilowane niezależnie bez dodatkowej pracy. Naprawdę powinieneś traktować plik sln jako grupę projektów, aby ułatwić pracę w programie Visual Studio, a nie jako dane wejściowe kompilacji.
źródło
Publikowanie jako informacja dla przyszłych poszukiwaczy
Dodaj poniższy kod do skryptu kompilacji i uruchom go raz. Spowoduje to wygenerowanie dokładnych celów i innych informacji, których będzie faktycznie używał msbuild.
Np .: jeśli masz
.
w nazwie projektu lub folderach, które msbuild będzie oczekiwał_
zamiast.
.Po uzyskaniu informacji zaktualizuj skrypt kompilacji o wymagane szczegóły.
źródło
Aby to zrobić, musisz wiedzieć, jaka jest nazwa docelowa projektu , niekoniecznie nazwa projektu.
Jednym ze sposobów, aby to sprawdzić, jest użycie programu MSBuild przeciwko SLN z zamierzonymi parametrami po ustawieniu specjalnej zmiennej środowiskowej wywoływanej
MSBuildEmitSolution
na wartość1
.Ostatnio musiałem to zrobić z powodu bardzo specyficznej nazwy celu w zagnieżdżonych katalogach. Więc z mojego wygenerowanego pliku
my_stuff.sln.metaproj
znalazłem tę linię:<Target Name="Utils\Firewall\FirewallUtils:Rebuild">
Oznacza to, że wiersz poleceń kończy się na
źródło
.csproj
w moim przypadku). I <3 SO!Aby dodać dodatkowe informacje, wykonanie msbuild w folderze projektu domyślnie skompiluje plik projektu, ponieważ jest to jedyny tam.
Istnieje wiele odmian korzystania z msbuild w ten sposób. Możesz określić plik proj bezpośrednio.
Przejrzyj dokumentację msbuild pod kątem użycia, wymagań dotyczących plików proj, a także korzyści z kompilowania projektu zamiast rozwiązania.
Dokumentacja MSBuild
Takie budowanie ma zalety, o czym wspomniał wyżej mark-smith.
źródło