2010-02-12 6 views
1

Le gestionnaire de mon projet m'a assigné la maintenance des versions, mais c'est mon premier contact avec MSBuild, donc les choses sont un peu difficiles, comme la plupart des premiers contacts. :)
J'ai eu du mal à obtenir MSBuild/Team Build pour copier certains fichiers dans le dossier "bin" de mon projet, mais je n'ai eu aucun succès jusqu'à présent.
Les fichiers sont conservés dans un dossier que nous utilisons comme référentiel pour les dépendances et les adaptateurs, car nous devons pouvoir compiler les solutions indépendamment les uns des autres, ainsi tous les fichiers nécessaires sont déjà présents lorsque MSBuild commence à fonctionner et évalue le groupe ItemGroup . Mon dernier essai était d'appeler la tâche de copie sur un « BeforeDropBuild » cible, comme ceci:Problème lors de l'utilisation de la tâche de copie de MSBuild (VS2005TS Team Build)

<Target Name="BeforeDropBuild"> 
    <Delete Files="@(DebugPoints)" ContinueOnError="true"></Delete> 
    <Copy SourceFiles="@(Adapters)" DestinationFolder="$(TargetDir)" ContinueOnError="true"></Copy> 
</Target> 

Je travaille déjà depuis un certain temps, car il est essentiellement tout ce qui reste pour moi pour terminer cette construction , donc j'ai déjà essayé un certain nombre d'approches différentes, et aucune ne m'a donné le résultat escompté.

Parmi les thinhs j'ai essayé étaient:
- "Dossier de destination" avec le chemin d'accès complet en tant que valeur;
- Copie de fichiers après l'abandon de la construction;
- Copie de fichiers sur la cible "AfterBuild";

Mais tous semblaient avoir le même résultat: pas même une entrée de la tentative ratée sur le BuildLog pour m'aider à trouver où je me trompe. Comme le code est maintenant, il me donne même les journaux de fichiers pdb il ne peut pas exclure dans d'autres dossiers, mais aucune mention de copier les tentatives, comme celui-ci:

Target BeforeDropBuild: 
    Deleting file "D:\blablabla\filepath\file.pdb". 
MSBUILD : warning MSB3061: Unable to delete file "D:\blablabla\filepath\file.pdb". Access to the path 'D:\blablabla\filepath\file.pdb' is denied. 
The previous error was converted to a warning because the task was called with ContinueOnError=true. 
Build continuing because "ContinueOnError" on the task "Delete" is set to "true". 

cible la construction Terminé « BeforeDropBuild » dans le projet "TFSBuild.proj".
Cela semble être un problème assez fondamental, mais je suis à court d'idées, pas même la recherche m'a aidé sur ce point (ce qui me conduit aussi à penser que c'est vraiment basique).

Edit:

<Target Name="AfterDropBuild"> 
    <CreateItem Include="$(AdaptersFolder)\Adapter*.dll"> 
     <Output ItemName="Adaptadores" TaskParameter="Include"/> 
    </CreateItem> 
    <CreateProperty Value="$(DropLocation)\$(BuildNumber)\%(ConfigurationToBuild.FlavorToBuild)"> 
     <Output ItemName="ReleaseFolder" TaskParameter="Value"/> 
    </CreateProperty> 
    <Copy DestinationFolder="$(ReleaseFolder)" SourceFiles="@(Adaptadores)" ContinueOnError="true"></Copy> 
    <OnError ExecuteTargets="Error"/> 
</Target> 

Un autre essai unsucessful. Ce n'était pas le bon répertoire, de toute façon, mais encore une fois, aucun fichier n'a été copié et il n'y a même pas de mention de la cible AfterDropBuild dans les fichiers journaux.

+0

Une technique qui a très bien fonctionné pour moi est de définir la sortie msbuild pour qu'elle soit verbeuse. Il est plus facile de retrouver les erreurs – gyurisc

+2

Vous pouvez également utiliser le moniteur de fichier ou de processus pour trouver ce qui ne va pas avec le fichier que vous essayez de supprimer. Peut-être qu'il n'existe pas ou vous n'avez pas les droits sur le dossier – gyurisc

+0

J'utilise MSBuild via la fonction Team Build sur VS2005, savez-vous où je peux définir la verbosité de sortie? Mais de toute façon, je dirais que c'est probablement déjà configuré de cette façon, puisque mon BuildLog.txt se termine par quelque chose autour de 5mb. – wintermute

Répondre

0

Pour une raison quelconque, il n'obtenait pas les fichiers comme prévu.
Je ne me souviens pas si c'était comme ça, peut-être était juste une erreur dans la syntaxe ou alors. Voici comment je l'ai fait maintenant:

<Target Name="AfterDropBuild"> 
    <CreateItem Include="$(AdaptersFolder)\AdapterModule.*.dll"> 
     <Output ItemName="Adapters" TaskParameter="Include"/> 
    </CreateItem> 
    <Copy DestinationFolder="$(DropBuildAdapterPath)" 
     SourceFiles="@(Adapters)" ContinueOnError="true"></Copy> 
    <OnError ExecuteTargets="Error"/> 
</Target> 

Cela semble être valide également aux fichiers créés lors de la construction, car il crée l'élément (et, par conséquent, valide la liste) juste après tout a été construit et copié abandonnez l'emplacement et les fichiers sont conservés sur le chemin de génération jusqu'à ce qu'une nouvelle génération démarre.

Questions connexes