Há algumas semanas atrás, durante uma consultoria em um cliente, me foi solicitada uma customização no processo de build de uma determinada aplicação. O problema é que essa era um Web Site, e não um Web Application Project. Para quem não sabe a diferença entre eles, dê uma olhada nesse link.

Basicamente, o problema era que eles queriam utilizar Web Config Transformation. O detalhe é que isso está disponível apenas para Web Application Projects. A idéia deles era criar diversos arquivos de transformação, um para cada ambiente. Por exemplo, essa aplicação seria publicada em 4 ambientes distintos: Intranet e Internet, sendo que ambos possuiam um ambiente de homologação e um ambiente de produção, e para cada um dos 4 ambientes, as configurações do Web.config deveriam ser diferentes.

Obs.: O cliente em questão usava o TFS 2010, mas em meu exemplo vou utilizar o TFS 2012.

Essa não é uma tarefa muito complicada, pois é uma requisição bastante comum. No CodePlex existe um projeto chamado Community TFS Build Extensions, cuja finalidade é compartilhar atividades que possam ser utilizadas nos workflows do Team Foundation Build. Para realizar a transformação do Web.config, basta fazer uso da atividade TransformConfig disponível nesse pacote do Build Extensions.

Para adicionar essa atividade ao seu Build Process Template, basta seguir os passos descritos neste link.

Depois de adicionada a atividade ao workflow, basta configurar os parâmetros de entrada e saída da mesma. Vá na atividade e aperte a tecla F4 para abrir a janela de propriedades:

screenshot0101

Configure as propriedades SourceFile, TransformFile e DestinationFile de acordo com sua necessidade. Como meu exemplo é bem simples, os valores das propriedades ficaram assim:

Propriedade Valor
SourceFile System.IO.Path.Combine(BinariesDirectory, “_PublishedWebsites\WebSite1\Web.config”)
TransformFile System.IO.Path.Combine(BinariesDirectory, “_PublishedWebsites\WebSite1\Web.QA.config”)
DestinationFile System.IO.Path.Combine(BinariesDirectory, “_PublishedWebsites\WebSite1\Web.config”)

Em minha aplicação exemplo, o Web.config está definido da seguinte forma:



    

    

    

Já o arquivo Web.QA.config, que é o arquivo responsável pela transformação está definido assim:


Para que a build funcione, adicione o assembly TfsBuildExtensions.Activities.VisualStudio.dll ao diretório de Custom Assemblies do seu Build Controller. Neste post eu mostro como fazer isso. Ao rodar a build, utilizando o process template customizado, o arquivo Web.config será transformado e copiado para a drop location. screenshot0151 Finalmente, o resultado do arquivo Web.config transformado será este:



    

    

    

Publicado originalmente em http://osmarlandin.net/2013/06/11/executando-testes-com-nunit-no-tfs-2012/ (13/06/2013)

Osmar Landin