2009-05-07 13 views
172

Po pomyślnej kompilacji chcę skopiować zawartość katalogu wyjściowego do innej lokalizacji pod tym samym folderem "baza". Ten folder nadrzędny jest względną częścią i może się różnić w zależności od ustawień Kontroli źródła.Event tworzenia komponentu Visual Studio - Kopiuj do względnego położenia katalogu

mam wymienione kilka wartości makr dostępnych mi ...

$ (SolutionDir) = D: \ GlobalDir \ Version \ AppName \ Porada1 \ budować

$ (ProjectDir) = D: \ GlobalDir \ Version \ AppName \ Porada1 \ Version \ Projecta \

chcę skopiować zawartość wyjściowe dir do następującego folderu:

D: \ GlobalDir \ Version \ Nazwa aplikacji \ Rozwiązanie2 \ Projekt \ Zależność

Lokalizacja podstawowa "D: \ GlobalDir \ Version \ AppName" musi zostać pobrana z jednego z powyższych makr. Jednak żadna z wartości makr nie zawiera pozycji nadrzędnej.

Jak wyodrębnić tylko lokalizację podstawową dla polecenia kopiowania kompilacji postu?

Odpowiedz

154

Jeśli żadna z TARGETDIR lub innych makr wskazują na właściwym miejscu, należy użyć „..” katalogu, aby przejść do tyłu w górę hierarchii folderów.

tj. Użyj $(SolutionDir)\..\.., aby uzyskać swój katalog podstawowy.


uzyskać listę wszystkich makr, zobacz tutaj:

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

+1

Jest to pomocne również: http://msdn.microsoft.com/en-us/library/c02as0cs.aspx – Eric

36

można spróbować:

$(SolutionDir)\..\..\ 
+5

Należy pamiętać, że zmienna $ (SolutionDir) ma już odwrotny ukośnik. Źródło: "Katalog rozwiązania (zdefiniowany przez dysk i ścieżkę), zawiera końcowy ukośnik odwrotny" \ "." https://msdn.microsoft.com/en-us/library/42x5kfw4.aspx – Snicker

2

Czy nie ma sensu używać msbuild bezpośrednio? Jeśli robisz to przy każdej kompilacji, możesz dodać zadanie msbuild na końcu? Jeśli chcesz tylko sprawdzić, czy nie możesz znaleźć innej wartości makr, która nie jest wyświetlana w Visual Studio IDE, możesz włączyć opcje msbuild do diagnostyki, która pokaże Ci wszystkie zmienne, których możesz użyć, oraz ich aktualną wartość.

Aby włączyć to w wizualnym studio, przejdź do Narzędzia/Opcje, a następnie przewiń widok drzewa do sekcji o nazwie Projekty i rozwiązania, rozwiń gałąź i kliknij opcję Buduj i biegnij, po prawej ich rozwijanie określa kompilacja wyjściowej szczegółowości, ustawienie tego na diagnostyczne, pokaże Ci, jakie inne wartości makr możesz użyć.

Ponieważ nie wiem do jakiego poziomu chciałbyś się udać i jak skomplikowana jest twoja budowa, może to dać ci pewien pomysł. Ostatnio robiłem skrypty budujące, które nawet wykonują kod SQL jako część kompilacji. Jeśli potrzebujesz dodatkowej pomocy lub kilku przykładowych skryptów do budowania, daj mi znać, ale jeśli jest to tylko mały proces, który chcesz uruchomić pod koniec kompilacji, być może przejście do pełnego skryptu msbuild jest nieco ponad zabójstwem. .

Nadzieja pomaga Rihan

+0

thx Rihan, ale najwyraźniej VS 2003 nie obsługuje tego! Oczywiście jestem całkiem zadowolony z wydarzenia post build ;-) – Preets

+0

Nie zdawałem sobie sprawy, że to było vs2003, a zatem użycie msbuild jako możliwego rozwiązania, jeśli pamiętam, że vs2003 było przed erą msbuild? Dzięki za odpowiedzi. Powodzenia w VS 2003, nie oglądałem się po przejściu na VS2005 –

205

Oto co chcesz umieścić w wierszu poleceń wydarzenie Post-build projektu:

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

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

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll" 
+1

Dobra wskazówka. Zapomniałem cytatów. –

+2

To nie działało dla mnie, ponieważ zapomniałem '/ Y'. Dzięki za pokazanie całego polecenia. – Mark

+6

Można użyć 'xcopy' z symbolami wieloznacznymi i odpowiednimi przełącznikami, aby osiągnąć podobny wynik, zachowując strukturę folderów źródłowych (drzewo), takich jak:' xcopy/i/e/s/y/f " \ MyFolder \ * "" \ MójFolder "' – Dr1Ku

8

Myślę, że jest związany, ale miałem problem podczas budowania bezpośrednio za pomocą msbuild wiersza polecenia (z pliku wsadowego) vs budynku od wewnątrz VS.

Korzystanie coś jak następuje:

<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żywany do dostać się wokół uprawnień kwestii, która zapobiega kopiowaniu)

Makro $(SolutionDir) ocenianego do ..\ podczas wykonywania msbuild z pliku wsadowego, który zakończył się niepowodzeniem polecenia XCOPY. W przeciwnym razie działał poprawnie, gdy został zbudowany z poziomu Visual Studio. Potwierdzono za pomocą /verbosity:diagnostic, aby zobaczyć ocenione wyniki.

Używając makra $(ProjectDir)..\ zamiast tego, co oznacza to samo, działało dobrze i zachowało pełną ścieżkę w obu scenariuszach budowy.

+1

łączący się z tym samym hack] (http://stackoverflow.com/a/20638116/1037948) na wypadek, gdy zapomniałem dać kredyt ... – drzaus

+0

Dobra robota, pracowałem najlepiej ze wszystkich odpowiedzi – AgentFire

+0

'Start' pracował dla mnie (dla' xcopy' w udostępnionym folderze). – AgentFire

Powiązane problemy