113 votes

Copie des fichiers dans le dossier de l'application au moment de la compilation

Si j'ai des fichiers que je veux copier de mon projet dans le fichier .\bin\debug\ lors de la compilation, il semble que je doive les placer dans la racine du projet. Les placer dans un sous-dossier semble les copier dans le dossier .\bin\debug\ dans la même structure que celle dans laquelle ils sont stockés.

Existe-t-il un moyen d'éviter cela ?

Pour être clair : si j'ai un MyFirstConfigFile.txt y MySecondConfigFile.txt dans un ConfigFiles et je définis leur Copier vers la sortie être Copier... puis ils apparaissent dans le .\bin\debug\ConfigFiles\ dossier. Je veux qu'ils apparaissent dans le dossier .\bin\debug\ dossier.

103voto

JoshBerke Points 34238

Vous pourriez le faire en organisant un événement après la construction. Définissez les fichiers comme étant sans action à la compilation, puis dans la macro, copiez les fichiers dans le répertoire de votre choix.

Voici une macro post-construction qui, je pense, fonctionnera en copiant tous les fichiers d'un répertoire appelé Configuration dans le dossier de construction racine :

copy $(ProjectDir)Configuration\* $(ProjectDir)$(OutDir)

58voto

Vous pouvez utiliser une tâche MSBuild sur votre csproj, comme cela.

Modifiez votre fichier csproj

  <Target Name="AfterBuild">
    <Copy SourceFiles="$(OutputPath)yourfiles" DestinationFolder="$(YourVariable)" ContinueOnError="true" />
  </Target>

47voto

Georg Points 1

Vous pouvez également placer les fichiers ou les liens dans la racine de l'explorateur de solutions, puis définir les propriétés des fichiers :

Build action = Content

et

Copy to Output Directory = Copy if newer (par exemple)

Pour un lien, faites glisser le fichier de l'explorateur Windows vers l'explorateur de solutions en maintenant les touches Majuscule et Contrôle enfoncées.

enter image description here

27voto

Jérôme MEVEL Points 1458

Personnellement, je préfère cette méthode.

Modifier le .csproj pour ajouter

<ItemGroup>
    <ContentWithTargetPath Include="ConfigFiles\MyFirstConfigFile.txt">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <TargetPath>%(Filename)%(Extension)</TargetPath>
    </ContentWithTargetPath>
</ItemGroup>

ou en généralisant, si vous voulez copier tous les sous-dossiers et fichiers, vous pouvez le faire :

<ItemGroup>
    <ContentWithTargetPath Include="ConfigFiles\**">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <TargetPath>%(RecursiveDir)\%(Filename)%(Extension)</TargetPath>
    </ContentWithTargetPath>
</ItemGroup>

3voto

Ehsäɳ Khʌɳ Points 31

Copier d'un sous-dossier à un autre

 if not exist "$(ProjectDir)$(OutDir)subfolder" mkdir "$(ProjectDir)$(OutDir)subfolder"

 copy "$(ProjectDir)subfolder\"  "$(ProjectDir)$(OutDir)subfolder\"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X