Скопіюйте файл (и) з одного проекту в інший за допомогою події побудови… VS2010


133

У мене є рішення з трьома проектами в ньому. Мені потрібно скопіювати представлення з одного проекту на інший. Я можу скопіювати створену 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:

  • / Я - трактую як каталог, якщо копіює кілька файлів.
  • / Q - Не відображати файли, що копіюються.
  • / S - Скопіюйте підкаталоги, якщо вони порожні.
  • / E - Скопіюйте порожні підкаталоги.
  • / Y - Не вимагайте перезаписати існуючі файли.
  • / R - Перезапис файлів лише для читання.

2
Я додав цей рядок до своєї збірки публікацій, і я отримую цю помилку "Помилка 1 Команда" xcopy "C: \ Користувачі \ tcompton \ Завантаження \ MEFMVCPOC \ ModuleA \ Перегляди \ ModuleAHome \ Index.cshtml" "C: \ Користувачі \ 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

Помітьте лапки в шляху до джерела та шляху до місця призначення, але не в шляху до ексклюзивного файлу txt.

Вміст виключеного FilesList.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.

Дякую. / Виключити: працює після додавання лапок до 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 - припускає, що призначення є каталогом (але має закінчуватися)

Невеликий трюк - у цілі ви повинні закінчити символом \, щоб сказати 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 дому → Події → PostBuildEvent
Поллукс

3

Ця команда працює як шарм для мене:

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

Він рекурсивно копіює кожен файл dllі exeфайл MySolutionPath\librariesв bin\debugабо bin\release.

Більше інформації можна знайти тут


2

Як і попередні відповіді, я також пропоную xcopy. Однак я хотів би додати до параметра відповіді Холджейра Енгена /excludeпараметр. Здається, виникла помилка з параметром, який заважає йому працювати з довгими іменами шляху або містять пробіли, оскільки лапки не працюватимуть. Імена шляхів повинні бути у форматі "DOS" з "Документами", що перекладається на "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.