2008-10-22 3 views
7

Когда вы контролируете сборку TFS из Visual Studio (2008 или 2005), вы можете видеть, где она находится.Как мы можем отобразить «шаг» внутри процесса сборки Visual Studio?

Проблема в том, что у меня есть некоторые пользовательские шаги Post-Build, которые я хотел бы, чтобы разработчик мог видеть непосредственно через пользовательский интерфейс. Эти шаги занимают несколько раз, и мы также можем получить «время» шага сборки.

Любая идея, как его отобразить?

ответ

9

Это шаблон, который я обычно использую для добавления шагов к отчету о сборках в TFS 2008. (См http://code.msdn.microsoft.com/buildwallboard/ для полного примера, который я обычно использую в моей Team Build переговоров)

В основном, магия является то, что есть специальная задача, предоставленная для вас в TFS2008 под названием «BuildStep». Вот раздел, в котором я произвожу и MSI инсталлятора и построить соответствующие шаги сборки в отчете:

<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> 

Так изначально, я создаю шаг сборки и сохранить Id шага в Собствености называется InstallerStepId. После того, как я выполнил свою задачу, я установил статус этого шага в Succeeded. Если во время шага возникают какие-либо ошибки, я устанавливаю статус этого шага на Failed.

Удача,

Martin.

+0

Это EXACLTY это! Благодаря!!!! – 2008-10-22 18:48:15

0

Обратите внимание, что в замечательном примере @Martin Woodward PackageBinaries является одним из существующих TFS build targets. Если вы хотите использовать свои собственные цели, вы можете использовать CallTarget задачу вызов их из одного из известных целей, например,

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

Тогда в ваших целях (например, CreateDelivery) использовать задачу BuildStep согласно Мартину пример.