Visual Studio: wiele poleceń post-build?

Visual Studio 2008 pozwala mi zadeklarować polecenie i dołączyć je do zdarzenia post-build dla projektu. Jak wielu programistów, używam go regularnie do xcopy plików do katalogu wyjściowego aplikacji.

Pracuję nad projektem, w którym muszę skopiować pliki z dwóch różnych miejsc do dwóch różnych miejsc docelowych, wszystko w ramach jednego projektu. Innymi słowy, muszę wywołać dwa różne polecenia xcopy z tego samego zdarzenia post-build. Wygląda na to, że zdarzenie post-build zajmie tylko jedno polecenie, i że jeśli muszę wywołać wiele poleceń, będę musiał umieścić polecenia w *.plik bat i wywołaj go ze zdarzenia post-build.

Czy to prawda, czy istnieje prostszy sposób na wywołanie dwóch poleceń ze zdarzenia post-build? Z góry dziękuję za pomoc.

Author: David Veeneman, 2010-01-02

9 answers

Możesz wpisać dowolną liczbę poleceń budowania postów. Po prostu rozdziel je nowymi liniami.

Oto przykład z jednego z moich projektów.

Wiersz Poleceń Zdarzenia Post Build

 105
Author: womp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-30 14:22:09

Ważne: podczas wykonywania pliku wsadowego należy użyć instrukcji "call"w celu wykonania następujących linii. Jeśli nie używasz "call", egzekucja idzie do .bat i doesnt wracają do następujących linii. To samo, co w wierszu polecenia DOS.

Np.:

call MyBatch1.bat
call MyBatch2.bat
 93
Author: huha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-29 10:03:48

Każde polecenie powinno być w osobnej linii. Znalazłem jednak to, że jeśli wystąpi błąd wykonania jednego z tych poleceń, cały post-build nie powiedzie się, więc będziesz musiał wypróbować każde polecenie post-build po jednym na raz, aby debugować.

 10
Author: Lisa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-20 00:14:48

Jest jeszcze jedna opcja: możesz oddzielić polecenia za pomocą &&. Np.

copy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2

To nie jest dokładnie to samo, co oddzielanie nowymi liniami: z &&, jeśli poprzednie polecenie nie powiodło się, następny commant nie zostanie uruchomiony.

Oddzielanie znakami nowej linii jest łatwiejsze do odczytania, więc powinieneś to preferować. Znam jednak przynajmniej jeden przypadek, kiedy && jest przydatny. Jest to scenariusz, gdy używasz arkuszy właściwości, aby mieć różne kroki po kompilacji na różnych maszynach. VS 2008 nie Zezwalaj na ustawianie PostBuildStep bezpośrednio w arkuszach właściwości, ale możesz dodać makro użytkownika za pomocą polecenia i wywołać je z głównych ustawień projektu. Makro jest jednoliniowe, więc możesz użyć &&, aby mieć tam wiele poleceń.

 10
Author: Steed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-16 09:20:51

Dodanie do womp ' S odpowiedź :

Jeśli masz kilka arkuszy właściwości, które mają coś do zrobienia w tym samym zdarzeniu build, możesz wykonać następujące czynności, aby połączyć polecenia:

%(Command)
echo foo

Gdzie %(Command) rozszerza się do poprzedniej wartości polecenia.

Osobiście robię to dla wszystkich zdarzeń build, nawet jeśli obecnie nie mam dziedziczonych poleceń, ponieważ zapewnia to, że nie będzie żadnych problemów, jeśli dodam arkusze właściwości później.

 4
Author: Max Truxa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:58

Oddzielanie poleceń za pomocą & Lub & & lub; nie działa w VS2017. Nie mogę uwierzyć, że tak prosta funkcjonalność nie jest dostępna w VS2017. Visual studio próbuje wykonać cały tekst w oknie zdarzenia post build jako jeden ciąg znaków. Jedyną opcją dla mnie teraz jest stworzenie skryptu wsadowego, który szczególnie mi się nie podoba.

 3
Author: Indra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 17:58:05

Podejście zaproponowane przez womp działa w Visual Studio 2015/2017 (Windows), ale nie działa w Visual Studio for Mac (Preview), które wydaje się wykonywać tylko pierwsze polecenia. Jedynym podejściem, które znalazłem w Visual Studio, zarówno w wersji Mac, jak i Windows, było łączenie 2 komend MSBuild:

<Target Name="AfterResolveReferences">
<Exec Command="path\MyFirstCommand.exe -parameters" />
</Target>
<Target Name="MySecondCommand" AfterTargets="AfterResolveReferences" >
<Exec Command="path\MySecondCommand.exe -parameters" />
</Target>

Powyższy przykład używa zdarzenia "AfterResolveReferences", ale oczywiście powinno działać również dla zdarzenia PostBuild.

 0
Author: Crulex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-24 10:06:24

Nie ma dobrego rozwiązania tego problemu. Pomysł wywołania powoduje uruchamianie innych skryptów. Zauważyłem, że wykrywanie błędów nie będzie działać. Umieść 'exit / b 1' w FailMe.cmd Użycie " call FailMe.cmd " w etapach budowania post. Zauważ, że budowa nie zawiedzie? Używam VS 2017 budując Projekt C#. Teraz spróbuj z ' FailMe.cmd ' the build teraz zgłasza błąd.

Więc może być lepiej po prostu za pomocą jednego skryptu, jeśli raportowanie błędów jest ważne.

 0
Author: Richard Meadows,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-14 20:08:55

Wystarczy przedrostek "call" do skryptu wsadowego. Tak, że polecenia pod skryptem wsadowym są również wykonywane po zwróceniu wywołania ze skryptu wsadowego.

call Script1.cmd
call Script2.bat
 -3
Author: msKing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-08 11:11:23