2008-10-22 13 views
7

Lorsque vous surveillez la construction TFS à partir de Visual Studio (2008 ou 2005), vous pouvez voir où elle se situe.Comment pouvons-nous afficher une "étape" dans le processus de construction de Visual Studio?

Le problème est que j'ai quelques après génération étapes personnalisées Je voudrais que le développeur pour pouvoir voir directement throught l'interface utilisateur. Ces étapes prennent parfois et nous pouvons également obtenir un "timing" de l'étape de construction.

Toute idée comment l'avoir affiché?

Répondre

9

C'est le modèle que j'utilise normalement pour ajouter des étapes au rapport de construction dans TFS 2008. (Voir http://code.msdn.microsoft.com/buildwallboard/ pour l'exemple complet que je l'habitude d'utiliser dans mon équipe pour le parle)

Fondamentalement, la magie est que TFS2008 vous propose une tâche personnalisée appelée "BuildStep". Voici la section où je produis et installateur MSI et construire les étapes de construction appropriées dans le rapport:

<Target Name="PackageBinaries"> 

    <!-- create the build step --> 
    <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
       BuildUri="$(BuildUri)" 
       Message="Creating Installer" 
       Condition=" '$(IsDesktopBuild)' != 'true' " > 
     <Output TaskParameter="Id" 
       PropertyName="InstallerStepId" /> 
    </BuildStep> 

    <!-- Create the MSI file using WiX --> 
    <MSBuild Projects="$(SolutionRoot)\SetupProject\wallboard.wixproj" 
    Properties="BinariesSource=$(OutDir);PublishDir=$(BinariesRoot);Configuration=%(ConfigurationToBuild.FlavourToBuild)" > 
    </MSBuild> 

    <!-- If we sucessfully built the installer, tell TFS --> 
    <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
       BuildUri="$(BuildUri)" 
       Id="$(InstallerStepId)" 
       Status="Succeeded" 
       Condition=" '$(IsDesktopBuild)' != 'true' " /> 

    <!-- Note that the condition above means that we do not talk to TFS when doing a Desktop Build --> 

    <!-- If we error during this step, then tell TFS we failed--> 
    <OnError ExecuteTargets="MarkInstallerFailed" /> 
    </Target> 

    <Target Name="MarkInstallerFailed"> 
    <!-- Called by the PackageBinaries method if creating the installer fails --> 
    <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
       BuildUri="$(BuildUri)" 
       Id="$(InstallerStepId)" 
       Status="Failed" 
       Condition=" '$(IsDesktopBuild)' != 'true' " /> 
    </Target> 

Alors d'abord, je crée l'étape de construction et enregistrer l'identifiant de l'étape dans un propery appelé InstallerStepId. Après avoir effectué ma tâche, j'ai défini le statut de cette étape sur Succeeded. Si des erreurs se produisent au cours de l'étape, je définis l'état de cette étape sur Échec.

Bonne chance,

Martin.

+0

C'est EXACTEMENT! Merci!!!! –

+0

Je viens de le tester. Cela fonctionne très bien. Merci! –

0

Notez que dans le bon exemple de @Martin Woodward, PackageBinaries est l'un des TFS build targets existants. Si vous souhaitez utiliser vos propres objectifs, vous pouvez utiliser la tâche CallTarget pour les appeler à partir de l'une des cibles connues, par exemple,

<Target Name="AfterDropBuild"> 
    <CallTarget Targets="CreateDelivery"/> 
    <CallTarget Targets="CreateInventory"/> 
</Target> 

ensuite dans vos cibles (par exemple, CreateDelivery) utilisent la tâche BuildStep comme par Martin Exemple.