Copie des fichiers de projet Visual Studio dans le répertoire de sortie pendant la compilation

quand je construis un projet Visual Studio, l'exécutable est écrit dans le répertoire de sortie spécifié dans la Page de propriété des projets.

j'ai un projet qui a des fichiers (par exemple, .ini fichier) qui sont utilisés par le programme.

comment configurer le projet pour copier le fichier dans le répertoire de sortie de sorte que lorsque le programme tourne, il ait une copie de l'autre fichier dans son CWD?

j'ai vérifié la propriété Page du fichier et il n'y avait rien d'utile autre qu'une option pour l'exclure de la compilation (qui est désactivée), et la commande custom-build-tool est vide (plus c'est un fichier texte qui n'a pas besoin de traitement).

31
demandé sur Synetech 2012-05-31 07:19:15

7 réponses

pour copier des fichiers dans le répertoire de sortie de Visual Studio 2003, vous pouvez utiliser l'événement Post-Build:

  1. clic droit sur le Projet - > Propriétés
  2. Propriétés Communes - > Événements De Construction
  3. mettre la ligne de commande Post-Build Event à:

    xcopy /y $(ProjectDir)my_file.ini  $(ProjectDir)$(OutDir)
    
  4. OK " et construire!

32
répondu Dmitry Pavlov 2017-01-07 04:59:21

veuillez essayer de sélectionner le fichier dans Solution Explorer. Alors vous devriez être en mesure de voir ses propriétés dans la fenêtre de propriétés (appuyez sur F4 si elle n'est pas visible). Vous y trouverez deux propriétés:

  • Construire "Action" et
  • "Copier dans le Répertoire de Sortie"

définir "action de construction" à "contenu", puis - sélectionner une valeur appropriée pour le paramètre "Copier vers le répertoire de sortie".

fenêtre de propriétés de fichier avec" action de compilation "et" paramètres de copie vers le répertoire de sortie

File properties window with "Build Action" and "Copy to Output Directory" settings

si le chemin ci-dessus ne fonctionne pas pour vous, s'il vous plaît lire ce post " copie à problème de répertoire de sortie avec .fichier inf ". Et jetez un oeil à celui-ci alors " Visual Studio: action de construction par défaut pour les types de fichiers non par défaut "

espérons que aide

25
répondu Dmitry Pavlov 2017-05-23 12:10:32

pendant que je cherchais dans la Page de propriété du fichier un champ de construction-action, j'ai pensé: définir l'étape de construction personnalisée à copier le fichier (manuellement). Ceci s'est avéré être plus facile que je pensais. J'avais pensé qu'il faudrait utiliser cmd ou un autre exécutable externe ( xcopy , robocopy , etc.), mais qui n'est pas nécessaire.

j'ai défini L'étape de construction personnalisée comme suit:

Command Line : copy $(InputFileName) $(OutDir)
Description  : Copying foobar...
Outputs      : $(InputFileName)

outputs field (correctly) était critique afin d'empêcher VS de toujours penser que le projet est dépassé et qu'il doit être reconstruit (Je ne suis pas certain qu'il doive être préfixé par $(OutDir)\ ).

elle se reflète dans la fenêtre de sortie en tant que telle:

Copying foobar...
        1 file(s) copied.
Compiling resources...
Linking...
4
répondu Synetech 2012-05-31 07:01:13

pour VS 2017 La commande Dmitry Pavlov affichée serait la suivante:

xcopy /y "$(ProjectDir)my_file.ini"  "$(OutDir)"

les citations sont importantes dans le cas où il y a des espaces dans le chemin d'accès au répertoire du projet.

1
répondu Kieran Chandler 2018-04-26 10:41:19

vous avez besoin de l'extra $(OutDir). Sinon, dans l'étape de reconstruction/nettoyage, il va jeter votre source.

CommandLine : copy "$(SolutionDir)last-script.js" "$(TargetDir)Debug"

Outputs  : $(TargetDir)Debug\last-script.js
0
répondu roland roos 2014-12-19 11:22:59

Amélioration De Synetech réponse:

En VS 2013 projet C++ en Ligne de Commande : copy %(Identité) $(OutDir) Description : Copie de foobar... Résultats: % (Identité) Cela fonctionne, mais cela conduit à une dépendance circulaire , c'est-à-dire qu'il sera exécuté chaque fois que vous exigez une construction incrémentale, aucun mètre qu'il a déjà été copié.

pour résoudre ce problème , vous pouvez ajouter cet élément dans le dossier cible, changer de chemin vers $(OutDir), et utiliser cet élément dans le premier élément ajouté en sortie. Drawback-deux articles avec le même nom sont en solution.

aussi utile xcopie avec /d /y paramètres dans postbuild - copie seulement si la date de fichier cible est plus ancienne.

0
répondu user1837919 2016-05-03 14:44:43

dans le cas où cela aide quelqu'un, j'ai dû copier la dll de sortie du projet que je construis dans un autre projet.

xcopy /y "$(ProjectDir)$(OutDir)$(TargetName)$(TargetExt)" 
"C:\Application\MyApplicationName\bin\x86\Debug"

/y = overwrite file if already exists
$(ProjectDir) = location on your machine where the project lives
$(OutDir) = is where your current build setup outputs the build
$(TargetName) = What the project being built is set to be called. Ex: XXX of XXX.dll
$(TargetExt) = the extension of the build Ex: .dll of XXX.dll

"C:/..../x86/Debug" is the location to copy to.
0
répondu vbp13 2018-06-29 19:54:03