Как мы можем отобразить «шаг» внутри процесса сборки Visual Studio? - PullRequest
7 голосов
/ 22 октября 2008

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

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

Есть идеи, как его отобразить?

Ответы [ 2 ]

9 голосов
/ 22 октября 2008

Это шаблон, который я обычно использую для добавления шагов в отчет о сборке в 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>

Итак, сначала я создаю шаг сборки и сохраняю идентификатор шага в свойствах, называемых InstallerStepId. После того, как я выполнил свою задачу, я установил статус этого шага как Успешный. Если во время шага возникают какие-либо ошибки, я устанавливаю статус этого шага Неудачный.

Удачи,

Martin.

0 голосов
/ 08 декабря 2011

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

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

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

...