2008-10-22 12 views
7

Cuando está supervisando la compilación de TFS desde Visual Studio (2008 o 2005), puede ver dónde está.¿Cómo podemos mostrar un "paso" dentro del proceso de compilación de Visual Studio?

El problema es que tengo algunos pasos personalizados Post-Build que me gustaría que el desarrollador pueda ver directamente a través de la interfaz de usuario. Esos pasos toman algunas veces y también podemos obtener un "momento" del paso de compilación.

¿Alguna idea de cómo mostrarla?

Respuesta

9

Este es el patrón que normalmente se utiliza para agregar pasos para el informe de compilación en TFS 2008. (Ver http://code.msdn.microsoft.com/buildwallboard/ para el ejemplo completo que yo suelo usar en mi equipo Construir conversaciones)

Básicamente, la magia es que hay una tarea personalizada provista en TFS2008 llamada "BuildStep". Aquí es la sección donde el genero y el instalador MSI y construir los pasos de generación apropiadas en el informe:

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

Así que al principio, que crean el paso de generación y guardar el ID del paso en un hotel fenomenal llamado InstallerStepId. Después de haber realizado mi tarea, establecí el estado de ese paso en Exitoso. Si ocurre algún error durante el paso, establezco el estado de ese paso en Fallido.

Buena suerte,

Martin.

+0

Eso es EXACLTY it! ¡¡¡¡Gracias!!!! –

+0

Acabo de probarlo. Funciona muy bien. ¡Gracias! –

0

Tenga en cuenta que en el gran ejemplo de @Martin Woodward, PackageBinaries es uno de los existentes TFS build targets. Si desea utilizar sus propios objetivos, puede utilizar la tarea CallTarget a llamarlos desde uno de los objetivos conocidos, por ejemplo,

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

Luego, en sus objetivos (por ejemplo, CreateDelivery) utilizar la tarea BuildStep según Martin ejemplo.

Cuestiones relacionadas