Copia i file da un progetto a un altro usando l'evento post build ... VS2010


132

Ho una soluzione con 3 progetti. Devo copiare una vista da un progetto a un altro. Sono in grado di copiare la DLL creata tramite eventi post build in questo modo:

inserisci qui la descrizione dell'immagine

Quindi voglio copiare il file nel progetto uno '/Views/ModuleHome/Index.cshtml' in una cartella nel progetto 2. Come posso copiare i file sul mio progetto desiderato tramite l'evento post-build? Grazie

Risposte:


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

e se vuoi copiare intere cartelle:

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

Aggiornamento: ecco la versione funzionante

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

Ecco alcuni switch comunemente usati con xcopy:

  • / I - considera come una directory se si copiano più file.
  • / Q - Non visualizzare i file da copiare.
  • / S : copia le sottodirectory se non vuote.
  • / E - Copia sottodirectory vuote.
  • / Y : non richiede la sovrascrittura dei file esistenti.
  • / R : sovrascrive i file di sola lettura.

2
Ho aggiunto questa riga al mio post build e ottengo questo errore "Errore 1 Il comando" xcopy "C: \ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ Download \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModuleAHome "" uscito con il codice 2. " Cosa significa questo?
BoundForGlory

Guardate la finestra di output: Ctrl+W+O. La Views\ModuleAHomecartella esiste nella posizione di destinazione? Guardate la finestra di output per il comando esatto in esecuzione e quindi leggere la documentazione per il comando xcopy per capire le diverse opzioni disponibili: xcopy /?.
Darin Dimitrov,

1
La cartella "Views \ ModuleAHome" esiste ma non fa parte del progetto di destinazione, il che significa che devi fare clic su "mostra tutti i file" affinché appaia in VS.
BoundForGlory

1
Non penso che il fatto che la cartella di destinazione non faccia parte del progetto di destinazione faccia alcuna differenza in xcopy. Questo comando opera direttamente con il file system. Per quanto riguarda la visualizzazione di questa cartella come parte del progetto di destinazione, automatizzare questa attività potrebbe essere più difficile.
Darin Dimitrov,

1
Capito ... xcopy "$ (ProjectDir) Views \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / Y / I ... questo articolo è stato di aiuto insieme al tuo input 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

Notare le virgolette nel percorso di origine e nel percorso di destinazione, ma non nel percorso per eliminare il file txt.

Il contenuto di ExcludedFilesList.txt è il seguente: .cs \

Sto usando questo comando per copiare il file da un progetto nella mia soluzione, a un altro ed escludendo i file .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.

Grazie. Il / exclude: funziona dopo aver aggiunto le virgolette a your-source-pathe your-destination-path. Senza quelle citazioni non funziona affatto.
AechoLiu

@AechoLiu Le virgolette sono sempre necessarie se il percorso del file ha uno spazio vuoto, ad es "My File.txt".
Felipe Romero

14

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

/ F: visualizza i nomi di file di origine e destinazione completi

/ R: questo sovrascriverà i file di sola lettura

/ Y: elimina la richiesta di sovrascrivere un file esistente

/ I - Presuppone che la destinazione sia directory (ma deve terminare con)

Un piccolo trucco: nel target devi terminare con il carattere \ per dire a xcopy che il target è directory e non file!


8

Chiamare il Batchfile che verrà eseguito Xcopyper i file richiesti dall'origine alla destinazione

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

7

Lo uso così.

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

Nota l'uso di questo. $ (TargetDir) ha già '\' "D: \ MyProject \ bin \" = $ (TargetDir)

Puoi trovare la macro nell'editor dei comandi

inserisci qui la descrizione dell'immagine


1
Progetto @HarshilDoshi → Proprietà del progetto → Crea eventi → PostBuildEvent
Polluks

3

Questo comando funziona come un incantesimo per me:

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

E ' ricorsivamente copie ogni dlle exedei file da MySolutionPath\librariesin bin\debugobin\release .

Puoi trovare maggiori informazioni qui


2

Come le risposte precedenti, sto anche suggerendo xcopy. Tuttavia, vorrei aggiungere alla risposta di Hallgeir Engen con il /excludeparametro. Sembra che ci sia un bug con il parametro che gli impedisce di lavorare con nomi di percorso che sono lunghi o che contengono spazi, poiché le virgolette non funzioneranno. I nomi dei percorsi devono essere nel formato "DOS" con "Documenti" che traducono in "DOCUME ~ 1" (secondo questa fonte ).

Quindi, se si desidera utilizzare il parametro \ exclude, esiste una soluzione alternativa qui :

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

Si noti che i percorsi di origine e destinazione possono (e dovrebbero, se contengono spazi) essere tra virgolette, ma non il percorso del file di esclusione.


2

Se si desidera prendere in considerazione la piattaforma (x64, x86 ecc.) E la configurazione (debug o rilascio) sarebbe qualcosa del genere:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.