Skopiuj plik (i) z jednego projektu do innego przy użyciu zdarzenia po kompilacji… VS2010


132

Mam rozwiązanie zawierające 3 projekty. Muszę skopiować widok z jednego projektu do drugiego. Jestem w stanie skopiować utworzoną bibliotekę DLL za pośrednictwem zdarzeń po kompilacji, takich jak:

wprowadź opis obrazu tutaj

Chcę więc skopiować plik z projektu nr 1 „/Views/ModuleHome/Index.cshtml” do folderu w projekcie 2. Jak skopiować plik (i) do żądanego projektu za pośrednictwem zdarzenia po kompilacji? Dzięki

Odpowiedzi:


309
xcopy "$(ProjectDir)Views\Home\Index.cshtml" "$(SolutionDir)MEFMVCPOC\Views\Home"

a jeśli chcesz skopiować całe foldery:

xcopy /E /Y "$(ProjectDir)Views" "$(SolutionDir)MEFMVCPOC\Views"

Aktualizacja: oto wersja robocza

xcopy "$(ProjectDir)Views\ModuleAHome\Index.cshtml" "$(SolutionDir)MEFMVCPOC\Views\ModuleAHome\" /Y /I

Oto kilka często używanych przełączników z xcopy:

  • / I - traktuj jako katalog w przypadku kopiowania wielu plików.
  • / Q - Nie wyświetlaj kopiowanych plików.
  • / S - Kopiuj podkatalogi, chyba że są puste.
  • / E - Kopiuj puste podkatalogi.
  • / Y - Nie pytaj o nadpisanie istniejących plików.
  • / R - Zastąp pliki tylko do odczytu.

2
Dodałem ten wiersz do mojej kompilacji postu i otrzymuję ten błąd „Błąd 1 Polecenie„ xcopy ”C: \ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ Pliki do pobrania \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModuleAHome „” zakończono z kodem 2. ” Co to znaczy?
BoundForGlory

Spójrz na okna wyjściowego: Ctrl+W+O. Czy Views\ModuleAHomefolder istnieje w lokalizacji docelowej? Spójrz na okna wyjściowego dla dokładnego polecenia wykonywane, a następnie zapoznać się z dokumentacją dla polecenia xcopy zrozumieć różne przełączniki dostępne: xcopy /?.
Darin Dimitrov

1
Folder „Views \ ModuleAHome” istnieje, ale nie jest częścią projektu docelowego, co oznacza, że ​​należy kliknąć opcję „pokaż wszystkie pliki”, aby pojawił się w programie VS.
BoundForGlory,

1
Nie sądzę, że fakt, że folder docelowy nie jest częścią projektu docelowego, ma jakiekolwiek znaczenie dla xcopy. To polecenie działa bezpośrednio w systemie plików. Jeśli chodzi o wyświetlanie tego folderu jako części projektu docelowego, automatyzacja tego zadania może być trudniejsza.
Darin Dimitrov

1
Rozumiem ... xcopy "$ (ProjectDir) Views \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / Y /I.Ten artykuł pomógł wraz z twoimi danymi social.msdn. microsoft.com/Forums/uk/csharpgeneral/thread/…
BoundForGlory

20
xcopy "your-source-path" "your-destination-path" /D /y /s /r /exclude:path-to-txt- file\ExcludedFilesList.txt

Zwróć uwagę na cudzysłowy w ścieżce źródłowej i docelowej, ale nie w ścieżce do pliku exludelist txt.

Zawartość ExcludedFilesList.txt jest następująca: .cs \

Używam tego polecenia, aby skopiować plik z jednego projektu w moim rozwiązaniu do innego i z wyłączeniem plików .cs.

/D Copy only files that are modified in sourcepath
/y Suppresses prompting to confirm you want to overwrite an existing destination file.
/s Copies directories and subdirectories except empty ones.
/r Overwrites read-only files.

Dziękuję Ci. / Exclude: działa po dodaniu cudzysłowów do your-source-pathi your-destination-path. Bez tych cytatów to w ogóle nie działa.
AechoLiu

@AechoLiu Cudzysłowy są zawsze konieczne, jeśli ścieżka do pliku zawiera spację, np "My File.txt".
Felipe Romero

14

xcopy "$ (TargetDir) * $ (TargetExt)" "$ (SolutionDir) \ Scripts \ MigrationScripts \ Library \" / F / R / Y / I

/ F - wyświetla pełne nazwy plików źródłowych i docelowych

/ R - spowoduje to nadpisanie plików tylko do odczytu

/ Y - pomija monitowanie o nadpisanie istniejącego pliku (ów)

/ I - zakłada, że ​​miejscem docelowym jest katalog (ale musi kończyć się na)

Mała sztuczka - w miejscu docelowym musisz zakończyć znakiem \, aby powiedzieć xcopy, że celem jest katalog, a nie plik!


8

Wywołaj Batchplik, który będzie uruchamiany Xcopydla wymaganych plików źródło do miejsca docelowego

call "$(SolutionDir)scripts\copyifnewer.bat"

7

Używam tego w ten sposób.

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)Lib\TIRM\x86\" /F /Y 
xcopy "$(TargetDir)$(TargetName).lib" "$(SolutionDir)Lib\TIRM\x86\" /F /Y 


/F : Copy source is File   
/Y : Overwrite and don't ask me

Zwróć uwagę na użycie tego. $ (TargetDir) ma już '\' "D: \ MyProject \ bin \" = $ (TargetDir)

Możesz znaleźć makro w Edytorze poleceń

wprowadź opis obrazu tutaj


1
@HarshilDoshi Project → Project Property → Build Events → PostBuildEvent
Polluks

3

To polecenie działa dla mnie jak urok:

for /r "$(SolutionDir)libraries" %%f in (*.dll, *.exe) do @xcopy "%%f" "$(TargetDir)"

To rekurencyjnie kopii co dlli exeplików z MySolutionPath\librariesInto the bin\debugalbo bin\release.

Więcej informacji znajdziesz tutaj


2

Podobnie jak poprzednie odpowiedzi, również sugeruję xcopy. Chciałbym jednak dodać do odpowiedzi Hallgeira Engena /excludeparametr. Wydaje się, że wystąpił błąd w parametrze, który uniemożliwia mu pracę z nazwami ścieżek, które są długie lub zawierają spacje, ponieważ cudzysłowy nie będą działać. Nazwy ścieżek muszą być w formacie „DOS” z „Dokumentami” tłumaczonymi na „DOCUME ~ 1” (zgodnie z tym źródłem ).

Jeśli więc chcesz użyć parametru \ exclude, istnieje obejście tego problemu :

cd $(SolutionDir)
xcopy "source-relative-to-path-above" "destination-relative-to-path-above
/exclude:exclude-file-relative-path

Zwróć uwagę, że ścieżki źródłowa i docelowa mogą (i powinny, jeśli zawierają spacje) być ujęte w cudzysłów, ale nie ścieżka do pliku wykluczeń.


2

Jeśli chcesz wziąć pod uwagę platformę (x64, x86 itp.) I konfigurację (Debug lub Release), byłoby to mniej więcej tak:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.