Event Visual Studio Post Build-kopiowanie do względnej lokalizacji katalogu

Po pomyślnym zbudowaniu chcę skopiować zawartość katalogu wyjściowego do innej lokalizacji w tym samym folderze "base". Ten folder nadrzędny jest częścią względną i może się różnić w zależności od ustawień kontroli źródła.

Wymieniłem kilka dostępnych mi wartości makr ...

$(SolutionDir) = D:\GlobalDir\Version\AppName \ Solution1 \ build

$(ProjectDir) = D:\GlobalDir\Version\AppName \ Solution1 \ Version \ ProjectA\

I chcesz skopiować zawartość katalogu wyjściowego do następującego folderu :

D:\GlobalDir\Version\AppName \ Solution2 \ Project \ Dependency

Lokalizacja bazy "D:\GlobalDir\Version\AppName" należy pobrać z jednego z powyższych makr. Jednak żadna z listy wartości makra nie zawiera tylko lokalizacji nadrzędnej.

Jak wyodrębnić tylko lokalizację bazową polecenia post build copy ?

Author: Pang, 2009-05-07

5 answers

Jeśli żadne z TargetDir lub innych makr nie wskazuje na właściwe miejsce, użyj".."katalog, aby przejść wstecz w górę hierarchii folderów.

Ie. Użyj $(SolutionDir)\..\.., aby uzyskać katalog podstawowy.


Lista wszystkich makr znajduje się tutaj:

Http://msdn.microsoft.com/en-us/library/c02as0cs.aspx

 164
Author: gbjbaanb,
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
2015-02-24 00:32:10

Oto co chcesz umieścić w wierszu poleceń zdarzenia post-build projektu:

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"

EDIT: lub jeśli nazwa docelowa jest inna niż nazwa projektu.

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
 235
Author: Lucas B,
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-03-13 14:55:01

Możesz spróbować:

$(SolutionDir)..\..\
 38
Author: ichiban,
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-07-07 18:06:26

Myślę, że jest to związane, ale miałem problem przy budowaniu bezpośrednio przy użyciu linii poleceń msbuild (z pliku wsadowego) vs budowaniu z wewnątrz VS.

Używając czegoś takiego:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>

(Uwaga: start XCOPY zamiast XCOPY używane do obejścia problemu z uprawnieniami, który uniemożliwiał kopiowanie)

Makro $(SolutionDir) zostało ocenione do ..\ podczas wykonywania msbuild z pliku batch, co skutkowało niepowodzeniem polecenia XCOPY. W przeciwnym razie działał dobrze, gdy zbudowany z w ramach Visual Studio. Potwierdzono za pomocą /verbosity:diagnostic, aby zobaczyć wartość wyjściową.

Używanie zamiast tego makra $(ProjectDir)..\, które odpowiada tej samej rzeczy, działało dobrze i zachowało pełną ścieżkę w obu scenariuszach budowania.

 10
Author: drzaus,
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-12-30 19:51:07

Czy nie ma sensu używać msbuild bezpośrednio? Jeśli robisz to przy każdym buildzie, możesz dodać zadanie msbuild na końcu? Jeśli chcesz tylko sprawdzić, czy nie możesz znaleźć innej wartości makra, która nie jest wyświetlana w Visual Studio IDE, możesz włączyć opcje msbuild na diagnostic i pokaże Ci wszystkie zmienne, których możesz użyć, a także ich bieżącą wartość.

Aby włączyć to w visual studio, przejdź do Narzędzia/Opcje, a następnie przewiń w dół drzewa zobacz sekcję o nazwie projekty i rozwiązania, rozwiń ją i kliknij Build i uruchom, po prawej stronie jest rozwijana, która określa szczegółowość wyjściową kompilacji, ustawiając ją na diagnostykę, pokaże ci, jakich innych wartości makr możesz użyć.

Ponieważ nie do końca wiem, do jakiego poziomu chciałbyś przejść i jak skomplikowany chcesz, aby Twoja budowa była, to może dać ci jakiś pomysł. Ostatnio robiłem Skrypty build, które nawet wykonują kod SQL w ramach build. Jeśli chciałbym trochę więcej pomocy lub nawet kilka przykładowych skryptów budowania, daj mi znać, ale jeśli jest to tylko mały proces, który chcesz uruchomić pod koniec kompilacji, być może będzie pełny skrypt msbuild to trochę ponad kill.

Hope it helps Rihan

 4
Author: Rihan Meij,
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
2009-05-07 12:44:01