Visual Studio 2008 pozwala mi zadeklarować polecenie i dołączyć je do zdarzenia po kompilacji projektu. Podobnie jak wielu programistów, używam go regularnie do kopiowania 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, a wszystko to w ramach jednego projektu. Innymi słowy, muszę wywołać dwa różne polecenia xcopy z tego samego zdarzenia po kompilacji. Wygląda na to, że zdarzenie po kompilacji zajmie tylko jedno polecenie, a jeśli będę musiał wywołać wiele poleceń, będę musiał umieścić polecenia w pliku * .bat i wywołać to ze zdarzenia po kompilacji.
Czy to prawda, czy jest prostszy sposób wywołania dwóch poleceń ze zdarzenia po kompilacji? Z góry dziękuje za twoją pomoc.
źródło
Ważne: Podczas wykonywania pliku wsadowego należy użyć instrukcji „call” w celu wykonania następujących wierszy. Jeśli nie użyjesz "call", wykonanie przejdzie do .bat i nie wróci do następnych linii. To samo, co w przypadku zachęty DOS.
na przykład:
źródło
Jest jeszcze jedna opcja: możesz oddzielić polecenia za pomocą
&&
. Na przykładcopy $(TargetPath) d:\folder1 && copy $(TargetPath) d:\folder2
To nie jest dokładnie to samo, co oddzielanie
&&
znakami nowej linii: za pomocą , jeśli poprzednie polecenie zawiodło, następny komenda nie zostanie uruchomiony.Oddzielanie znakami nowej linii jest łatwiejsze do odczytania, więc powinieneś je preferować. Jednak znam przynajmniej jeden przypadek, kiedy
&&
jest przydatny. Jest to scenariusz, w którym używasz arkuszy właściwości do wykonywania różnych kroków po kompilacji na różnych komputerach. VS 2008 nie pozwala na ustawienie 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 w jednym wierszu, więc możesz użyć&&
wielu poleceń.źródło
Każde polecenie powinno znajdować się w osobnym wierszu. Odkryłem jednak, że jeśli wystąpi błąd podczas wykonywania jednego z tych poleceń, cała post-kompilacja zawiedzie, a więc będziesz musiał wypróbować każde polecenie po kompilacji pojedynczo, aby debugować.
źródło
Oddzielanie poleceń za pomocą & lub && lub; nie działa w VS2017. Nie mogę uwierzyć, że tak prosta funkcjonalność nie jest dostępna w VS2017. Program Visual Studio próbuje wykonać cały tekst w oknie zdarzenia po kompilacji jako jeden ciąg. Jedyną opcją dla mnie jest teraz stworzenie skryptu wsadowego, którego nie lubię specjalnie.
źródło
Dodając do womp jest odpowiedź :
Jeśli masz wiele arkuszy właściwości z czymś do zrobienia w ramach tego samego zdarzenia kompilacji, możesz wykonać następujące czynności, aby połączyć polecenia:
gdzie
%(Command)
rozwija się do poprzedniej wartości polecenia.Osobiście robię to dla wszystkich zdarzeń kompilacji, nawet jeśli obecnie nie mam dziedziczonych poleceń, ponieważ zapewnia to, że nie będzie problemów, jeśli później dodam arkusze właściwości.
źródło
exit
instrukcji wsadowej w dowolnym miejscu łańcucha powoduje przerwanie łańcucha. Rzeczywiścieexit 1
powoduje niepowodzenie kompilacji, podczas gdyexit 0
po prostu przerywa krok i jest kontynuowana.W programie Visual Studio 2017 możesz to zrobić:
źródło
Podejście sugerowane przez womp działa w Visual Studio 2015/2017 (Windows), ale nie działa w Visual Studio dla komputerów Mac (wersja zapoznawcza), który wydaje się wykonywać tylko pierwsze z poleceń. Jedynym podejściem, które znalazłem działającym w wersjach Visual Studio na komputery Mac i Windows, było połączenie w łańcuch 2 poleceń MSBuild:
Powyższy przykład używa zdarzenia „AfterResolveReferences”, ale oczywiście powinien działać również dla zdarzenia PostBuild.
źródło
Nie ma dobrego rozwiązania tego problemu. Idea wywołania powoduje uruchomienie innych skryptów. Zauważyłem, że wykrywanie błędów nie działa. Umieść 'exit / b 1' w FailMe.cmd Użyj 'call FailMe.cmd' w krokach po kompilacji. Zauważ, że kompilacja nie zawodzi? Korzystam z VS 2017 budowania projektu C #. Teraz spróbuj z „FailMe.cmd”. Kompilacja teraz zgłasza błąd.
Więc lepiej byłoby, gdybyś użył tylko jednego skryptu, jeśli raportowanie błędów jest ważne.
źródło
Po prostu wpisz przedrostek „call” do swojego skryptu wsadowego. Tak więc instrukcje poniżej skryptu Batch są również wykonywane po zwróceniu wywołania ze skryptu wsadowego.
źródło