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:
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