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