Copie los archivos de un proyecto a otro mediante el evento posterior a la compilación ... VS2010

132

Tengo una solución con 3 proyectos. Necesito copiar una vista de un proyecto a otro. Puedo copiar la DLL creada a través de eventos posteriores a la construcción de esta manera:

ingrese la descripción de la imagen aquí

Entonces, quiero copiar el archivo en el proyecto uno '/Views/ModuleHome/Index.cshtml' a una carpeta en el proyecto 2. ¿Cómo copio los archivos a mi proyecto deseado a través del evento posterior a la compilación? Gracias

Con destino a la gloria
fuente

Respuestas:

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

y si quieres copiar carpetas enteras:

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

Actualización: aquí está la versión de trabajo

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

Aquí hay algunos interruptores de uso común con xcopy:

  • / I : tratar como un directorio si copia varios archivos.
  • / Q : no muestra los archivos que se copian.
  • / S : copia los subdirectorios a menos que estén vacíos.
  • / E : copia subdirectorios vacíos.
  • / Y : no solicite sobrescribir los archivos existentes.
  • / R - Sobrescribir archivos de solo lectura.
Darin Dimitrov
fuente
2
Agregué esta línea a mi post build y recibí este error "Error 1 El comando" xcopy "C: \ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ Descargas \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModuleAHome "" salió con el código 2 ". ¿Qué significa esto?
BoundForGlory
Mira la ventana de salida: Ctrl+W+O. ¿Existe la Views\ModuleAHomecarpeta en la ubicación de destino? Observe la ventana de salida para el comando exacto que se ejecuta y luego leer la documentación para el comando xcopy para comprender los diferentes interruptores disponibles: xcopy /?.
Darin Dimitrov
1
La carpeta 'Views \ ModuleAHome' existe pero no es parte del proyecto de destino, lo que significa que debe hacer clic en 'mostrar todos los archivos' para que aparezca en VS.
BoundForGlory
1
No creo que el hecho de que la carpeta de destino no sea parte del proyecto de destino hace ninguna diferencia para xcopy. Este comando opera directamente con el sistema de archivos. En cuanto a hacer que esta carpeta aparezca como parte del proyecto de destino, automatizar esta tarea puede ser más difícil.
Darin Dimitrov
1
Lo tengo ... xcopy "$ (ProjectDir) Views \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / Y /I.... este artículo ayudó junto con su entrada 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

Observe las comillas en la ruta de origen y en la ruta de destino, pero no en la ruta para excluir el archivo txt.

El contenido de ExcludedFilesList.txt es el siguiente: .cs \

Estoy usando este comando para copiar archivos de un proyecto en mi solución, a otro y excluyendo archivos .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.
Hallgeir Engen
fuente
Gracias. / Exclude: funciona después de agregar comillas a your-source-pathy your-destination-path. Sin esas citas no funciona en absoluto.
AechoLiu
@AechoLiu Las comillas siempre son necesarias si la ruta del archivo tiene espacio en blanco, por ejemplo "My File.txt".
Felipe Romero
14

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

/ F: muestra los nombres completos de los archivos de origen y destino

/ R: sobrescribirá los archivos de solo lectura

/ Y - Suprime la solicitud de sobrescribir un archivo existente

/ I - Asume que el destino es el directorio (pero debe terminar con)

Un pequeño truco: ¡en el destino debe terminar con el carácter \ para decirle a xcopy que el destino es el directorio y no el archivo!

Namrata Jain
fuente
8

Llame al Batcharchivo que se ejecutará Xcopypara los archivos necesarios de origen a destino

call "$(SolutionDir)scripts\copyifnewer.bat"
swapneel
fuente
7

Lo uso así.

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

Tenga en cuenta el uso de esto. $ (TargetDir) ya tiene '\' "D: \ MyProject \ bin \" = $ (TargetDir)

Puedes encontrar macro en el editor de comandos

ingrese la descripción de la imagen aquí

Súper mantis
fuente
1
@HarshilDoshi Project → Propiedad del proyecto → Build Events → PostBuildEvent
Polluks
3

Este comando funciona como un encanto para mí:

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

Se forma recursiva copias cada dlly exearchivos desde MySolutionPath\librariesdentro de la bin\debugo bin\release.

Puedes encontrar más información aquí

Bizhan
fuente
2

Al igual que las respuestas anteriores, también estoy sugiriendo xcopy. Sin embargo, me gustaría agregar a la respuesta de Hallgeir Engen con el /excludeparámetro. Parece que hay un error con el parámetro que impide que funcione con nombres de ruta largos o que contienen espacios, ya que las comillas no funcionarán. Los nombres de ruta deben estar en el formato "DOS" con "Documentos" traduciéndose a "DOCUME ~ 1" (según esta fuente ).

Entonces, si desea usar el parámetro \ exclude, hay una solución aquí :

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

Tenga en cuenta que las rutas de origen y destino pueden (y deberían, si contienen espacios) estar entre comillas, pero no la ruta al archivo de exclusión.

Kim
fuente
2

Si desea tener en cuenta la plataforma (x64, x86, etc.) y la configuración (Depurar o liberar) sería algo como esto:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
Flot2011
fuente