Inclure les fichiers de contenu dans .csproj qui sont en dehors du cône du projet

J’ai un projet C # dit MyProject.csproj situé dans “C: \ Projects \ MyProject \”. J’ai aussi des fichiers que je veux copier dans le répertoire de sortie de ce projet. Mais, les fichiers sont à l’emplacement “C: \ MyContentFiles \”, c’est-à-dire qu’ils ne sont PAS dans le cône du projet. Ce répertoire contient également des sous-répertoires. Le contenu du répertoire n’est pas géré. Par conséquent, je dois inclure tout ce qui est sous lui.

Lorsque je les inclut en tant que “contenu” dans le projet, ils sont copiés, mais la structure du répertoire est perdue. J’ai fait quelque chose comme ça: –

 PreserveNewest  

Comment copier ces fichiers / répertoires récursivement dans le répertoire de sortie du projet avec la structure de répertoire préservée?

Vous devez append un fichier en tant que lien:

  1. Faites un clic droit sur le projet dans VS.
  2. Ajouter -> Élément existant …
  3. Trouvez le fichier
  4. Sélectionnez-le et.
  5. Ajouter en tant que lien (liste déroulante dans le bouton Ajouter dans la boîte de dialog).
  6. Ouvrez les propriétés du fichier et définissez “Copier dans le répertoire de sortie” sur “Copier toujours”.

MAIS Vous ne pouvez pas le faire pour l’arborescence.
Au lieu de cela, vous devez écrire une tâche de post-construction pour cela. Ceci est un échantillon qui va vous faire regarder.

Je crois que @ Dysortingi a raison – vous voulez utiliser la fonctionnalité “lien”.

Cependant, il n’a que partiellement raison de dire que vous ne pouvez pas créer de lien vers une arborescence de répertoires. Bien que cela soit vrai, en effet, lorsque vous essayez d’append les liens à l’aide de l’interface graphique de Visual Studio, MSBuild le prend en charge.

Si vous souhaitez conserver la structure du répertoire, ajoutez simplement la balise %(RecursiveDir) à votre noeud :

  %(RecursiveDir)%(Filename)%(Extension) PreserveNewest  

La page Métadonnées d’élément bien connues MSBuild décrit plus en détail les métadonnées auxquelles vous pouvez accéder.

La réponse de Mandark ajoute les fichiers de contenu directement à la solution et ils apparaîtront dans l’explorateur de solutions. Chaque fois qu’un fichier est ajouté ou supprimé dans le répertoire d’origine, cela n’est pas automatiquement capté par Visual Studio. De plus, chaque fois qu’un fichier est supprimé ou ajouté dans l’explorateur de solutions, le fichier de projet est modifié et tous les fichiers sont inclus séparément, au lieu d’inclure uniquement le dossier.

Pour éviter cela, vous pouvez utiliser le même truc, mais placez-le dans un fichier de projet distinct, puis importez-le.

Le fichier de projet (par exemple include.proj) ressemble à ceci:

    %(RecursiveDir)%(Filename)%(Extension) PreserveNewest    

Dans votre propre fichier de projet, ajoutez la ligne suivante

  

Visual Studio ne va pas jouer avec ce fichier et ajoute simplement des fichiers en tant que contenu lors d’une génération. Les modifications dans le répertoire d’origine sont toujours incluses. Les fichiers n’apparaîtront pas dans votre explorateur de solution, mais seront inclus dans le répertoire de sortie.

Ramassé sur cette astuce ici: http://blogs.msdn.com/b/shawnhar/archive/2007/06/06/wildcard-content-using-msbuild.aspx

Les éléments suivants, que vous souhaitez append au bas de votre fichier de projet, copient vos fichiers de contenu en conservant la structure de répertoires dans un événement après génération dans le répertoire cible $(TargetDirectory) de votre génération (généralement $(MSBuildProjectDirectory)\bin\Debug ).

       

Si ces fichiers devaient aller dans un répertoire nommé MyContentFiles, vous pouvez append ceci avant la copie:

  

et changer

  

À

  

je pense

  PreserveNewest  

Est-ce juste assez, puisque vous voulez tout dans ce dossier et sous-dossiers

Pour ignorer un fichier dans le projet .Net Core :

   PreserveNewest