Скопируйте файл (ы) из одного проекта в другой, используя событие после сборки… VS2010


133

У меня есть решение с 3 проектами. Мне нужно скопировать вид из одного проекта в другой. Я могу скопировать созданную DLL с помощью событий после сборки следующим образом:

введите описание изображения здесь

Поэтому я хочу скопировать файл из первого проекта «/Views/ModuleHome/Index.cshtml» в папку проекта 2. Как скопировать файл (ы) в нужный проект с помощью события после сборки? Спасибо

Ответы:


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

и если вы хотите скопировать целые папки:

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

Обновление: вот рабочая версия

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

Вот некоторые часто используемые ключи с xcopy:

  • / I - рассматривать как каталог при копировании нескольких файлов.
  • / Q - не отображать копируемые файлы.
  • / S - Копировать подкаталоги, если они не пусты.
  • / E - Копировать пустые подкаталоги.
  • / Y - не запрашивать перезапись существующих файлов.
  • / R - перезаписать файлы только для чтения.

2
Я добавил эту строку в свой пост сборки, и я получаю эту ошибку "Ошибка 1 Команда" xcopy "C: \ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ Загрузка \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModuleAHome "" завершена с кодом 2. " Что это значит?
BoundForGlory

Посмотрите на окно вывода: Ctrl+W+O. Существует ли Views\ModuleAHomeпапка в целевой папке? Посмотрите на окне вывода для точной выполняемой команды , а затем прочитать документацию для хсора команды , чтобы понять различные переключатели доступны: xcopy /?.
Дарин Димитров

1
Папка «Views \ ModuleAHome» существует, но она не является частью целевого проекта, то есть вы должны нажать «показать все файлы», чтобы она появилась в VS.
BoundForGlory

1
Я не думаю, что тот факт, что папка назначения не является частью проекта назначения, не имеет никакого значения для xcopy. Эта команда работает напрямую с файловой системой. Что касается появления этой папки как части целевого проекта, автоматизация этой задачи может быть более сложной.
Дарин Димитров

1
Понятно ... xcopy "$ (ProjectDir) Views \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / Y /I. Эта статья помогла вместе с вашим вводом 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

Обратите внимание на кавычки в исходном пути и пути назначения, но не в пути к текстовому файлу exludelist.

Содержимое ExcludedFilesList.txt следующее: .cs \

Я использую эту команду для копирования файла из одного проекта в моем решении в другой, исключая файлы .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.

Спасибо. Параметр / exclude: работает после добавления кавычек к your-source-pathи your-destination-path. Без этих цитат ничего не получится.
AechoLiu

@AechoLiu Кавычки всегда необходимы, если в пути к файлу есть пустое пространство, например "My File.txt".
Фелипе Ромеро

14

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

/ F - отображает полные имена исходного и целевого файлов

/ R - перезапишет файлы, доступные только для чтения

/ Y - подавляет запрос на перезапись существующих файлов

/ I - Предполагается, что местом назначения является каталог (но должен заканчиваться)

Небольшой трюк - в target вы должны заканчивать символом \, чтобы указать xcopy, что цель - это каталог, а не файл!


8

Вызов Batchфайла, который будет запускаться Xcopyдля нужного файла источника к месту назначения

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

7

Я использую это так.

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

Обратите внимание на использование этого. $ (TargetDir) уже имеет '\' "D: \ MyProject \ bin \" = $ (TargetDir)

Вы можете найти макрос в редакторе команд

введите описание изображения здесь


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

3

Эта команда работает для меня как шарм:

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

Она рекурсивно копии каждые dllи exeфайлы из MySolutionPath\librariesв bin\debugили bin\release.

Вы можете найти больше информации здесь


2

Как и предыдущие ответы, я тоже предлагаю xcopy. Однако я хотел бы добавить к ответу Hallgeir Engen /excludeпараметр. Кажется, есть ошибка с параметром, препятствующим его работе с длинными путями или с пробелами, так как кавычки не будут работать. Имена путей должны быть в "DOS" -формате с "Documents", переводящейся в "DOCUME ~ 1" (согласно этому источнику ).

Итак, если вы хотите использовать \ исключить параметр, есть обходной путь здесь :

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

Обратите внимание, что исходные и целевые пути могут (и должны, если они содержат пробелы) заключаться в кавычки, но не в путь к файлу исключения.


2

Если вы хотите принять во внимание платформу (x64, x86 и т.д.) и конфигурацию (отладка или выпуск), это будет примерно так:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.