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:
- http://www.writebetterbits.com/2008/02/deploying-aspnet-web-application.html
- http://msdn.microsoft.com/en-us/library/ms164311.aspx