Je me demandais simplement si quelqu'un pouvait m'aider avec certains scripts msbuild que j'essaie d'écrire. Ce que je voudrais faire, c'est copier tous les fichiers et sous-dossiers d'un dossier vers un autre dossier à l'aide de msbuild.
{ProjectName}
|----->Source
|----->Tools
|----->Viewer
|-----{about 5 sub dirs}
Ce que je dois pouvoir faire est de copier tous les fichiers et sous-dossiers du dossier tools dans le dossier de débogage de l'application. C'est le code que j'ai jusqu'à présent.
<ItemGroup>
<Viewer Include="..\$(ApplicationDirectory)\Tools\viewer\**\*.*" />
</ItemGroup>
<Target Name="BeforeBuild">
<Copy SourceFiles="@(Viewer)" DestinationFolder="@(Viewer->'$(OutputPath)\\Tools')" />
</Target>
Le script de construction s'exécute mais ne copie aucun des fichiers ou des dossiers.
Merci
scripting
msbuild
build-process
build
Nathan W
la source
la source
%(RecursiveDir)
au dossier de destination recréera la structure du répertoire. Sinon, la sortie est plate. C'est la meilleure réponse.Je pense que le problème peut être dans la façon dont vous créez votre ItemGroup et appelez la tâche de copie. Voyez si cela a du sens:
la source
CreateItem
La tâche est obsolète. regex a l'alternative. msdn.microsoft.com/en-us/library/s2y3e43x.aspxJe suis un peu nouveau dans MSBuild mais je trouve la tâche EXEC pratique pour de telles situations. J'ai rencontré le même défi dans mon projet et cela a fonctionné pour moi et a été beaucoup plus simple. Quelqu'un s'il vous plaît laissez-moi savoir si ce n'est pas une bonne pratique.
la source
Copy
tâche au lieu d'une commande est la compatibilité. J'ai déjà construit sur Linux en utilisant Mono et nexcopy
fonctionne évidemment pas là-bas.\**\*.*
aide à obtenir des fichiers de tout le dossier. RecursiveDir aide à mettre tout le fichier dans le dossier respectif ...la source
CreateItem
La tâche est obsolète. regex a l'alternative. msdn.microsoft.com/en-us/library/s2y3e43x.aspxAvez-vous essayé de spécifier un répertoire de destination concret au lieu de
Je ne maîtrise pas très bien la syntaxe avancée de MSBuild, mais
me semble bizarre. Le script semble bon, donc le problème peut être dans les valeurs de
$(ApplicationDirectory)
et$(OutputPath)
ÉDITER:
Voici un article de blog qui pourrait être utile:
Comment: copier récursivement des fichiers à l'aide de la tâche
la source
Voici l'exemple qui a fonctionné:
source: https://msdn.microsoft.com/en-us/library/3e54c37h.aspx
la source
Il s'agit d'une tâche de copie que j'ai utilisée dans mon propre projet, cela fonctionnait parfaitement pour moi qui copie le dossier avec les sous-dossiers vers la destination avec succès:
Dans mon cas, j'ai copié le dossier de publication d'un projet dans un autre dossier de destination, je pense que c'est similaire à votre cas.
la source
Personnellement, j'ai utilisé CopyFolder qui fait partie de la bibliothèque de tâches SDC.
http://sdctasks.codeplex.com/
la source
La meilleure façon de copier récursivement des fichiers d'un répertoire à un autre à l'aide de MSBuild consiste à utiliser la tâche de copie avec SourceFiles et DestinationFiles comme paramètres. Par exemple - Pour copier tous les fichiers du répertoire de construction vers le répertoire de sauvegarde sera
Maintenant, dans la commande Copy ci-dessus, tous les répertoires source sont parcourus et les fichiers sont copiés dans le répertoire de destination.
la source
Si vous travaillez avec une chaîne d'outils C ++ typique, une autre façon de procéder consiste à ajouter vos fichiers dans la liste standard CopyFileToFolders
En plus d'être simple, c'est une bonne façon de procéder car la tâche CopyFilesToFolders générera des entrées, des sorties et même des fichiers TLog appropriés, garantissant ainsi que les opérations de copie ne s'exécuteront que lorsqu'un des fichiers d'entrée a changé ou que l'un des fichiers de sortie est manquant. Avec TLog, Visual Studio reconnaîtra également correctement le projet comme "à jour" ou non (il utilise un mécanisme U2DCheck distinct pour cela).
la source