Pourquoi ne pas MSBuild copie que je m'attends
Je suis besoin de faire un script de mon build. Je suis à l'aide de MSBUILD en raison de son intégration avec VS.net. Je suis en train de copier des fichiers à partir de l'environnement de compilation dans le dossier de déploiement. Je suis l'aide de la tâche de copie de MSBuild. Mais au lieu de copier l'arborescence du répertoire que je m'attends. il copie tout le contenu dans un dossier unique. Je le répète tous les fichiers de l'arborescence du répertoire à la fin dans un dossier. J'en ai besoin pour copier l'arborescence des dossiers et des répertoires dans le dossier de destination. Est-il quelque chose que je suis absent?
Ici est la relavant des parties de mon script de construction:
<PropertyGroup>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<Source>outputfolder</Source>
<DestEnv>x</DestEnv>
<DeployPath>\\networkpath$(DestEnv)</DeployPath>
</PropertyGroup>
<ItemGroup>
<TargetDir Include="$(DeployPath)\**\*" Exclude="**\web.config"></TargetDir>
<SourceDir Include="$(Source)\**\*" />
</ItemGroup>
<Target Name="Clean" >
<!-- clean detail ... -->
</Target>
<Target Name="migrate" DependsOnTargets="Clean">
<Copy DestinationFolder="$(DeployPath)" SourceFiles="@(SourceDir)" />
</Target>
OriginalL'auteur minty | 2008-11-05
Vous devez vous connecter pour publier un commentaire.
Juste un bijou, nous avons trouvé que nous étions de débogage MSBuild questions autour de la copie:
http://blog.scrappydog.com/2008/06/subtle-msbuild-bug-feature.html
ItemGroups sont analysées avant de Cibles, de sorte que toutes les Cibles que de créer de nouveaux fichiers (par exemple, compile!) ne seront pas ramassés lors d'une ItemGroup est référencé plus loin dans le script.
Eric Bowen décrit également un travail autour de cette "fonctionnalité", le CreateItem tâche:
Beaucoup, bravo à lui!
OriginalL'auteur Jarrod Dixon
Lorsque vous spécifiez le DestinationFolder pour la tâche de Copie, il prend tous les éléments de la SourceFiles collection et de les copier dans le DestinationFolder. C'est prévu, comme il n'existe aucun moyen pour la tâche de Copie de comprendre quelle est la part de chaque élément du chemin d'accès doit être remplacé par le DestinationFolder afin de garder la structure de l'arbre. Par exemple, si votre SourceDir collection est définie comme ceci:
Qu'attendez-vous le dossier de destination de l'arbre?
Pour préserver l'arbre, vous devez faire la transformation de l'identité et de générer un élément de destination pour chaque élément dans la SourceFiles collection. Voici un exemple:
La tâche de Copie va prendre le de chaque élément dans le SourceFiles collection, et fera son chemin par le remplacement de la partie avant de la * * * dans la source de l'élément de spécification $(DropPath).
On pourrait affirmer que la DestinationFolder propriété doit avoir été écrit comme un raccourci vers la transformation suivante:
Hélas, ce serait d'empêcher la copie en profondeur à dossier plat scénario que vous essayez d'éviter, mais d'autres personnes pourraient utiliser dans leur processus de construction.
OriginalL'auteur Franci Penov
Exemple très simple qui copie un répertoire et de son contenu et de la structure de manière récursive:
@(Compiler) est un ItemGroup de tous les fichiers que vous souhaitez copier. Pourrait être quelque chose comme:
La tâche de Copie permet de copier tous les fichiers dans c:\foocopy tout comme xcopy.
Je n'ai pas la moindre idée de ce qu'il se passe
devrait avoir la correction du bug de la... de la syntaxe alternative pour la valeur de DestinationFolder: DestinationFolder="@(Compiler-> " c:\foocopy\%(RecursiveDir)')"
OriginalL'auteur Adam
J'ai trouvé l'exemple dans l'un des exemples en MSDN je ne le comprends pas, mais laissera un exemple pour mes collègues travlers ici dans stackoverflow. Voici la version corrigée de l'migrer cible à partir de ci-dessus:
Si quelqu'un comprend cette exemple expliquer. Bonne Chance!
OriginalL'auteur minty