web-dev-qa-db-fra.com

Copie du ou des fichiers de projet Visual Studio dans le répertoire de sortie lors de la construction

Lorsque je crée un projet Visual Studio, l'exécutable est écrit dans le répertoire de sortie spécifié dans la page de propriétés du projet.

J'ai un projet qui contient des fichiers supplémentaires (par exemple, un fichier .ini) utilisés par le programme.

Comment puis-je configurer le projet pour copier le fichier dans le répertoire de sortie afin que, lorsque le programme est exécuté, il ait une copie de l'autre fichier dans son fichier CWD?

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

32
Synetech

Alors que je cherchais un champ d’action de construction dans la page de propriétés du fichier, j’avais une idée: définir l’étape de construction personnalisée sur copier le fichier (manuellement). Cela 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 ce 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)

Définir (correctement) le champ des sorties était essentiel pour éviter que VS ne pense toujours que le projet est obsolète et doit être reconstruit (je ne suis pas certain qu’il doive être précédé de $(OutDir)\).

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

Copying foobar...
        1 file(s) copied.
Compiling resources...
Linking...
4
Synetech

Pour copier un fichier 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. Définir la ligne de commande d'événement post-construction sur:  

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

33
Dmitry Pavlov

Cliquez ici pour accéder à Solution Explorer. Następnie powinieneś zobaczyć jego właściwości w oknie Właściwości (naciśnijF4jeśli nie jest widoczny). Znajdziesz tam dwie właściwości:

  • „Construire l'action” i
  • „Kopiuj do katalogu wyjściowego”

Ustaw „Build Action” na „Content”, un répertoire de copie dans le répertoire de sortie.

Okno właściwości pliku z ustawieniami „Kompilacja” i „Kopiuj do katalogu wyjściowego”

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

Jeśli powyższy sposób nie działa, przeczytaj ten wpis „ Kopiuj do wydania katalogu wyjściowego z plikiem .inf ”. Je parle à „ Studio visuel: accès direct à la base de données

Mam nadzieję, e à pomoże

27
Dmitry Pavlov

Pour VS 2017, la commande affichée par Dmitry Pavlov serait la suivante:

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

Les citations sont importantes au cas où il y aurait des espaces dans le chemin du répertoire du projet.

1
Kieran Chandler

Au cas où cela aiderait quelqu'un, je devais copier la DLL de sortie du projet que je construisais 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
vbp13

Amélioration de Synetech Réponse:

Dans la ligne de commande du projet VS 2013 C++: copy% (Identity) $ (OutDir) Description: Copie de foobar ... Sorties:% (Identity) Cela fonctionne, mais cela conduit à une dépendance circulaire, c'est-à-dire qu'il sera exécuté à chaque fois. vous exigez une construction incrémentielle, pas de compteur, il a déjà été copié. 

Pour résoudre ce problème, vous pouvez ajouter cet élément au dossier cible, modifier le chemin en $ (OutDir) et utiliser celui-ci dans le premier élément ajouté en tant que sortie. Inconvénient - deux éléments avec un nom similaire sont en solution.

Également utile xcopy avec les paramètres/d/y dans postbuild - copie uniquement si la date du fichier cible est plus ancienne.

0
user1837919

Vous avez besoin du extra $ (OutDir). Sinon, dans l'étape de reconstruction/nettoyage, il jettera votre source.

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

Outputs  : $(TargetDir)Debug\last-script.js
0
roland roos