Kilka projektów w rozwiązaniu mojego klienta ma zdarzenie po kompilacji: xcopy
dane wyjściowe kompilacji do określonego folderu. Działa to dobrze, gdy budujesz lokalnie. Jednak w TeamCity czasami dostaję
xcopy [...] zakończył działanie z kodem 2
Jeśli używam zwykłego copy
, kończy się z kodem 1. Spodziewam się, że ma to coś wspólnego z blokadami plików, chociaż kopiowane pliki nie są takie same, więc może po prostu blokowanie we współdzielonym katalogu docelowym. Używam, /y
aby nie pytać o nadpisywanie plików.
Dlaczego to zawodzi w TeamCity, ale nie lokalnie?
The user pressed CTRL+C to terminate xcopy
. Hehe.Odpowiedzi:
Nawet jeśli udostępnisz
/Y
przełącznik xcopy, nadal będziesz otrzymywać błąd, gdy xcopy nie będzie wiedział, czy kopiowana rzecz to plik czy katalog. Ten błąd pojawi się jako „wyjście z kodem 2”. Po uruchomieniu tego samego xcopy w wierszu polecenia zobaczysz, że xcopy prosi o odpowiedź pliku lub katalogu.Aby rozwiązać ten problem za pomocą automatycznej kompilacji, możesz powtórzyć wstępnie zdefiniowaną odpowiedź za pomocą potoku.
Aby powiedzieć, że kopiowana rzecz to plik, powtórz
F
:Aby powiedzieć, że kopiowana rzecz to katalog, powtórz w
D
:Czasami powyższy problem można rozwiązać, po prostu używając polecenia kopiowania zamiast xcopy:
Jeśli jednak istnieją nieistniejące katalogi prowadzące do ostatecznego miejsca docelowego pliku, nastąpi „wyjście z kodem 1”.
Pamiętaj:
/C
ostrożnie używaj przełącznika i xcopy.źródło
*
działać również z katalogami? Czy to tylko dla plików?Naprawiłem kod błędu 2, dodając \ na końcu mojej ścieżki, bez niego xcopy pomyśli, że jest to plik zamiast folderu.
źródło
Jeśli używasz xcopy w zdarzeniu po kompilacji, użyj przełącznika / Y oprócz / C.
źródło
/Y
pomija monit! Dlaczego było to tak trudne do znalezienia?Moją poprawką dla tego problemu było przejście do docelowego folderu bin i upewnienie się, że istnieje tam odpowiedni podfolder. Po ręcznym utworzeniu tego podfolderu proces kompilacji zakończył się pomyślnie.
źródło
copy
naprawił to dla mnie.xcopy with /c /y
nie działał. Dostałem wyjście 4, więc poszedłem zxcopy
, ale okazało się, że potrzebowałem cytatów($TargetPath)
.Mój skrypt:
źródło
Prawdopodobnie używasz TeamCity z git. Jeśli tak, sprawdź, czy foldery, które chcesz skopiować, istnieją w repozytorium git. Zwykle git aviod dodaje puste foldery projektu do repozytorium, więc
xcopy
nie znajduje go i generuje błąd.Możesz dodać jakiś pusty plik tekstowy do pustego folderu, zatwierdzić i zobaczyć, jak folder pojawia się w repozytorium.
źródło