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:
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
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.
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.
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!
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
Appelez le fichier Batch
qui exécutera Xcopy
pour les fichiers requis source à destination
call "$(SolutionDir)scripts\copyifnewer.bat"
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.
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
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