Copiez le (s) fichier (s) d'un projet à un autre à l'aide de l'événement post build… VS2010


132

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

entrez la description de l'image ici

Je veux donc copier le fichier du projet un «/Views/ModuleHome/Index.cshtml» dans un dossier du projet 2. Comment copier des fichiers dans mon projet souhaité via un événement post-build? Merci

Réponses:


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

et si vous souhaitez 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 - traiter comme un répertoire si vous copiez plusieurs fichiers.
  • / Q - N'affiche pas les fichiers en cours de copie.
  • / S - Copie les sous-répertoires sauf s'ils sont vides.
  • / E - Copie les sous-répertoires vides.
  • / Y - Ne demande pas d'écrasement des fichiers existants.
  • / R - Écrase les fichiers en lecture seule.

2
J'ai ajouté cette ligne à mon post build et j'obtiens cette erreur "Erreur 1 La commande" xcopy "C: \ Users \ tcompton \ Downloads \ MEFMVCPOC \ ModuleA \ Views \ ModuleAHome \ Index.cshtml" "C: \ Users \ tcompton \ Téléchargements \ MEFMVCPOC \ MEFMVCPOC \ Views \ ModuleAHome "" terminé avec le code 2. " Qu'est-ce que ça veut dire?
BoundForGlory

Regardez la fenêtre de sortie: Ctrl+W+O. Le Views\ModuleAHomedossier existe- t- il à l'emplacement cible? Regardez la fenêtre de sortie pour la commande exacte en cours d' exécution, puis lisez la documentation de la commande xcopy pour comprendre les différents commutateurs disponibles: xcopy /?.
Darin Dimitrov

1
Le dossier «Views \ ModuleAHome» existe mais ne fait pas partie du projet cible, ce qui signifie que vous devez cliquer sur «Afficher tous les fichiers» pour qu'il apparaisse dans VS.
BoundForGlory

1
Je ne pense pas que le fait que le dossier de destination ne fasse pas partie du projet de destination fasse une différence pour xcopy. Cette commande fonctionne directement avec le système de fichiers. Pour ce qui est de faire apparaître ce dossier dans le cadre du projet de destination, l'automatisation de cette tâche peut être plus difficile.
Darin Dimitrov

1
OK ... xcopy "$ (ProjectDir) Views \ ModuleAHome \ Index.cshtml" "$ (SolutionDir) MEFMVCPOC \ Views \ ModuleAHome \" / Y /I ... cet article vous a aidé avec votre entrée 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

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 dans ma solution vers un autre et en excluant les 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.

Je vous remercie. Le / exclude: fonctionne après l'ajout de guillemets à your-source-pathet your-destination-path. Sans ces citations, cela ne fonctionne pas du tout.
AechoLiu

@AechoLiu Les guillemets sont toujours nécessaires si le chemin de votre fichier contient un espace vide, par exemple "My File.txt".
Felipe Romero

14

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

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

/ R - Cela écrasera les fichiers en lecture seule

/ Y - Supprime l'invitation à écraser un ou plusieurs fichiers existants

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

Une petite astuce - dans cible, vous devez terminer par le caractère \ pour indiquer à xcopy que la cible est un répertoire et non un fichier!


8

Appelez le Batchfichier qui s'exécutera Xcopypour les fichiers requis de la source à la destination

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

7

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 ceci. $ (TargetDir) a déjà '\' "D: \ MyProject \ bin \" = $ (TargetDir)

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

entrez la description de l'image ici


1
@HarshilDoshi Project → Propriété du projet → Événements de construction → PostBuildEvent
Polluks

3

Cette commande fonctionne comme un charme pour moi:

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

Il copie récursivement tous les fichiers dllet exedepuis MySolutionPath\librariesle bin\debugoubin\release .

Vous pouvez trouver plus d'informations ici


2

Comme les réponses précédentes, je suggère également xcopy. Cependant, je voudrais ajouter à la réponse de Hallgeir Engen avec le /excludeparamètre. Il semble y avoir un bogue avec le paramètre l'empêchant de fonctionner 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" se traduisant par "DOCUME ~ 1" (selon cette source ).

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

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

Si vous voulez prendre en compte la plate - forme (x64, x86 etc.) et la configuration (Debug ou Release), ce serait quelque chose comme ceci:

xcopy "$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName).dll" "$(SolutionDir)TestDirectory\bin\$(Platform)\$(Configuration)\" /F /Y 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.