Compilando seu Web Application Project com o MSBuild

Programar em um IDE como o Visual Studio te dá muitas facilidades. O processo de compilação fica quase imperceptível para o desenvolvedor.

O problema surge no momento em que você quer algo diferente, como compilar versões distintas do código a partir do mesmo fonte, automatizar o build no servidor etc .

Para os que já usam Makefile ou o Ant, isto é trivial. Mas isto também é simples para os que usam o Visual Studio!

Vamos ver como construir um simples arquivo para o MSBuild compilar nosso projeto.

Primeiro é necessário que você possua o MSBuild instalado. Não se preocupe,  o Visual Studio 2008 já o instala .

E onde está o diabo do msbuild.exe? Aqui:

%windir%\Microsoft.NET\Framework\

Ou melhor,  execute (com as aspas!) o seguinte comando em um terminal:

"%VS90COMNTOOLS%\..\..\VC\vcvarsall.bat"

Teste digitando msbuild.exe /help

Precisamos agora construir um makefile arquivo de instruções para o MSBuild, que chamarei de Makefile.proj:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build"
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
  ToolsVersion="3.5">
  <!-- aqui eu importo um projeto que já existe, contendo todos os
      arquivos e assemblies que fazem parte do processo de compilação-->
  <Import Project="MeuProjeto.csproj"/>
  <!-- aqui eu defino algumas variáveis úteis -->
  <PropertyGroup>
      <VersionNumber>1.0.0</VersionNumber>
      <BuildRoot>Deploy\Releases\$(VersionNumber)\</BuildRoot>
      <NewInstallDir>$(BuildRoot)Install\</NewInstallDir>
      <UpgradeDir>$(BuildRoot)Upgrade\</UpgradeDir>
      <CopyRoot>..\EruditoHAOC_PROD_test\</CopyRoot>
  </PropertyGroup>
  <ItemGroup>
      <SourceFiles Include="**\*.*" />
  </ItemGroup>
  <!-- Aqui entram as instruções para a compilação e cópia
      doas arquivos gerados para a pasta de deploy -->
  <Target Name="Build">
    <MSBuild
        Projects="MeuProjeto.sln"
        Properties="OutputPath=$(NewInstallDir)bin\" />
    <Copy
        SourceFiles="@(Content->'%(RelativeDir)%(FileName)%(Extension)')"
        DestinationFiles=
          "@(Content->'$(NewInstallDir)%(RelativeDir)%(FileName)%(Extension)')" />
    <Copy
        SourceFiles="@(None->'%(RelativeDir)%(FileName)%(Extension)')"
        DestinationFiles=
          "@(None->'$(NewInstallDir)%(RelativeDir)%(FileName)%(Extension)')" />
    <MakeDir
        Directories="@(Folder->'$(NewInstallDir)%(RelativeDir)')" />
    <CreateItem
        Include="$(NewInstallDir)**"
        Exclude="**\App_Themes\**;**\Web.config">
        <Output ItemName="UpgradeFiles" TaskParameter="Include" />
    </CreateItem>
    <Copy
        SourceFiles="@(UpgradeFiles)"
        DestinationFiles=
          "@(UpgradeFiles->'$(UpgradeDir)%(RecursiveDir)%(FileName)%(Extension)')" />
    <MakeDir Directories="@(Folder->'$(UpgradeDir)%(RelativeDir)')" />
  </Target>
  <!-- Um exemplo de como copiar todo o projeto para outro lugar -->
  <Target Name="Deploy">
    <Copy
      SourceFiles="@(SourceFiles)"
      DestinationFiles=
        "@(SourceFiles->'$(DeployRoot)%(RecursiveDir)%(FileName)%(Extension)')" />
  </Target>
</Project>

Para compilar seu projeto agora basta rodar o comando make msbuild.exe, da seguinte forma:

MSBuild.exe Makefile.proj /target:Build

Isto irá compilar e copiar o resultado da menira definida no xml Makefile.proj.

Referências:

Posts relacionados

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>