J'ai un VS2008 Je souhaite copier certains fichiers d'un répertoire dans mon /bin/
dossier. J'ai défini les fichiers (situés dans /common/browserhawk/
) sur "Copier dans le répertoire de sortie". Cependant, il copie également la structure des dossiers: les fichiers sont copiés dans/bin/common/browserhawk/
Comment faire pour copier ces fichiers uniquement /bin/
? Je ne souhaite pas les stocker à la racine du site Web pour les copier correctement.
Question connexe: Visual Studio ajoute .dll et .pdb au projet après la compilation
la source
xcopy /s /d /y "$(ProjectDir)\stuff" "$(TargetDir)\stuff"
Comme je ne peux pas commenter les réponses précédentes, je vais mettre la solution ici:
En ajoutant à ce que @PaulAlexander a fourni, ajoutez ce qui suit à votre fichier .csproj / .vbproj:
Cela vous permet de sélectionner "RootContent" comme action de construction dans la fenêtre Propriétés, et tout est accessible via l'interface graphique. Une explication plus complète: l'option "AvailableItemName" crée essentiellement une nouvelle liste nommée à laquelle vous pouvez affecter des éléments du projet sous la propriété "Build Action" de la fenêtre Propriétés. Vous pouvez ensuite utiliser cette liste nouvellement créée dans n'importe quelle cible de votre choix (par exemple via "@ (RootContent)").
la source
AvailableItemName
être un élément non valide si vous éditez le fichier de projet dans VS; ignorez simplement l'avertissement, cela fonctionne de toute façon.<Target Name="RootOutputCopyTarget" AfterTargets="Build">
... </Target>Si vous modifiez le .csproj / .vbproj dans un éditeur de texte, vous pouvez contrôler l'emplacement du fichier dans le répertoire de sortie, ainsi que le nom du fichier dans le répertoire de sortie. Par exemple:
Cela mettra le fichier
content\someContent.txt
dansbin\someContentInOutputDirectory.txt
. Vous pouvez également choisir un sous-répertoire dansbin
si vous le souhaitez; ajoutez-le simplement à l'élément Link.la source
Je pense que la commande XCOPY gère mieux les répertoires et les fichiers. Par conséquent,
Ce qui permet de créer des dossiers hors du répertoire cible.
La structure des dossiers / fichiers du projet de:
Devient:
la source
/D
peut également être utile pour éviter d'écraser d'éventuelles modifications.Ajoutez ce qui suit à votre fichier .csproj / .vbproj
Modifiez ensuite l'action de génération de tous les fichiers de votre choix dans le dossier racine en RootContent.
la source
RootContent
n'apparaît pas dans la liste déroulante «Action de génération» et la saisie manuelle entraîne une erreur «La valeur de propriété n'est pas valide» de Visual Studio. Qu'est-ce que j'ai raté?Je l'ai utilisé dans VS2010, VS2015, VS2017 et VS2019. Je préfère cette solution car:
Vers le début du fichier de projet:
Emprunté à cette réponse
Après l'importation Microsoft .targets:
Emprunté à cette réponse
la source
RootContent
qui implique «codé en dur» pourCustomContent
indiquer qu'il s'agit d'un contenu spécialisé que nous ajoutons à ce projet et que nous devons copier de cette manière particulière. De plus, j'avais besoinTargetPath=%(RecursiveDir)%(Filename)%(Extension)
de recréer la structure desCustomContent
dossiers à partir des fichiers spécifiés vers le chemin de sortie./common/browserhawk/
pas la copie des fichiers sous/bin/common/browserhawk/
comme le dit l'OP? IIRC, mon intention était d'avoir/common/browserhawk/a.txt
fini dans/bin/a.txt
mais autoriser la récursion à partir de là vers le bas, donc/common/browserhawk/secret/stuff.png
finit dans/bin/secret/stuff.png
.%(RecursiveDirectory)
. C'est vraiment cool, car en plus de sélectionner des fichiers individuels dans l'EDI, vous pouvez également spécifier plusieurs fichiers avec des caractères génériques. Lorsque vous utilisez le**
caractère générique, toute la structure du dossier sera préservée.J'ai fini par ajouter une étape au fichier de construction nant à copier après une compliation réussie
la source
Vous pouvez créer un fichier de commandes pour copier les fichiers et l'exécuter en tant qu'événement post-construction.
la source