web-dev-qa-db-fra.com

Copier le ou les fichiers d'un projet à un autre à l'aide d'un événement post-build ... VS2010

J'ai une solution avec 3 projets. Je dois copier une vue d'un projet à un autre. Je suis capable de copier le DLL créé via les événements post-build comme ceci:

enter image description here

Donc, je veux copier le fichier dans le projet un '/Views/ModuleHome/Index.cshtml' dans un dossier du projet 2. Comment copier des fichiers dans le projet souhaité via un événement post-build? Merci

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

et si vous voulez copier des dossiers entiers:

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

Mise à jour: voici la version de travail

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

Voici quelques commutateurs couramment utilisés avec xcopy:

/I - treat as a directory if copying multiple files
/Q - Do not display the files being copied.
/S - Copy subdirectories unless empty.
/E - Copy empty subdirectories.
/Y - Do not Prompt for overwrite of existing files.
/R - Overwrite read only files.
289
Darin Dimitrov
xcopy "your-source-path" "your-destination-path" /D /y /s /r /exclude:path-to-txt- file\ExcludedFilesList.txt

Notez les guillemets dans le chemin source et le chemin de destination, mais pas dans le chemin du fichier txt exludelist.

Le contenu de ExcludedFilesList.txt est le suivant: .cs \

J'utilise cette commande pour copier un fichier d'un projet de ma solution à un autre, à l'exclusion des fichiers .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.
20
Hallgeir Engen

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

/ F - Affiche les noms de fichiers source et cible complets

/ R - Cela écrasera les fichiers en lecture seule

/ Y - Supprime l'invite à écraser un fichier existant

/ I - Suppose que la destination est un répertoire (mais doit se terminer par)

Un petit truc - dans la cible, vous devez terminer par\pour indiquer à xcopy que la cible est un répertoire et non un fichier!

14
Namrata Jain

Je l'utilise comme ça.

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

Notez l'utilisation de cela. $ (TargetDir) a déjà '\' "D:\MyProject\bin \" = $ (TargetDir)

Vous pouvez trouver la macro dans l'éditeur de commandes

enter image description here

7
Super-Mantis

Appelez le fichier Batch qui exécutera Xcopy pour les fichiers requis source à destination

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

Comme les réponses précédentes, je suggère également xcopy. Cependant, je voudrais ajouter à la réponse de Hallgeir Engen le paramètre /exclude. Il semble y avoir un bogue avec le paramètre l'empêchant de travailler avec des noms de chemin longs ou contenant des espaces, car les guillemets ne fonctionneront pas. Les noms de chemin doivent être au format "DOS" avec "Documents" traduisant en "DOCUME ~ 1" (selon cette source ).

Donc, si vous voulez utiliser le paramètre\exclude, il existe une solution de contournement here :

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

Notez que les chemins source et de destination peuvent (et devraient, s’ils contiennent des espaces) être entre guillemets, mais pas le chemin du fichier d’exclusion.

2
kim

Si vous voulez prendre en compte le plate-forme (x64, x86, etc.) et le configuration (Debug ou Release), cela ressemblerait à ceci:

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

Cette commande fonctionne comme un charme pour moi:

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

Il récursivement copie chaque fichier dll et exe de MySolutionPath\libraries dans le bin\debug ou bin\release.

Vous pouvez trouver plus d'informations dans ici

2
Bizhan