Construção e Empacotamento de Projetos de Aplicações Web

por Jason Lee

Quando quiser implementar um projeto de aplicação web para um ambiente de servidor remoto, a sua primeira tarefa é construir o projeto e gerar um pacote de implementação web. Este tópico descreve como funciona o processo de construção em projetos de aplicações web. Em particular, explica:

  • Como o Web Publishing Pipeline (WPP) estende o processo de compilação para incluir funcionalidades de implementação.
  • Como a Ferramenta de Implementação Web dos Serviços de Informação da Internet (IIS) (Web Deploy) transforma a sua aplicação web num pacote de implementação.
  • Como funciona o processo de construção e empacotamento e que ficheiros são criados.

No Visual Studio 2010, o processo de construção e implementação de projetos de aplicações web é suportado pelo WPP. O WPP fornece um conjunto de alvos do Microsoft Build Engine (MSBuild) que estendem a funcionalidade do MSBuild e permitem a sua integração com o Web Deploy. No Visual Studio, pode ver esta funcionalidade alargada nas páginas de propriedades do seu projeto de aplicação web. As páginas Empacotar/Publicar Web e Empacotar/Publicar SQL permitem configurar como o seu projeto de aplicação web é empacotado para implementação após a conclusão do processo de compilação.

A página Web Package/Publicar, juntamente com a página Package/Publish S Q L, permite-lhe configurar como o seu projeto de aplicação web é empacotado para implementação quando o processo de compilação estiver concluído.

Como funciona o WPP?

Se olhares para o ficheiro de projeto de uma aplicação web baseada em C#, podes ver que ele importa dois ficheiros .targets.

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\
                 v10.0\WebApplications\Microsoft.WebApplication.targets" />

A primeira instrução Import é comum a todos os projetos Visual C#. Este ficheiro, Microsoft.CSharp.targets, contém alvos e tarefas específicas do Visual C#. Por exemplo, a tarefa do compilador C# (Csc) é invocada aqui. O ficheiro Microsoft.CSharp.targets importa, por sua vez, o ficheiro Microsoft.Common.targets . Isto define alvos comuns a todos os projetos, como Construir, Reconstruir, Executar, Compilar e Limpar. A segunda declaração de Importação é específica para projetos de aplicações web. O ficheiro Microsoft.WebApplication.targets importa, por sua vez, o ficheiro Microsoft.Web.Publishing.targets . O ficheiro Microsoft.Web.Publishing.targetsé essencialmente o WPP. Define alvos, como Package e MSDeployPublish, que invocam o Web Deploy para completar várias tarefas de implementação.

Para compreender como estes alvos adicionais são usados, na solução de exemplo Contact Manager, abra o ficheiro Publish.proj e veja o alvo BuildProjects .

<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
  <MSBuild Projects="@(ProjectsToBuild)"
           Properties="OutDir=$(OutputRoot);
                       Configuration=$(Configuration);
                       DeployOnBuild=true;
                       DeployTarget=Package"
           Targets="Build" />
</Target>

Este alvo utiliza a tarefa MSBuild para construir vários projetos. Repare nas propriedades DeployOnBuild e DeployTarget :

  • A propriedade DeployOnBuild=true significa essencialmente "Quero executar um alvo adicional quando a build for concluída com sucesso."
  • A propriedade DeployTarget identifica o nome do destino que pretende executar quando a propriedade DeployOnBuild é igual a true. Neste caso, estás a especificar que queres que o MSBuild execute o alvo do Pacote depois de construir o projeto.

O destino do pacote está definido no ficheiro Microsoft.Web.Publishing.targets . Essencialmente, este objetivo pega na saída de build do seu projeto de aplicação web e transforma-a num pacote de implementação web que pode ser publicado num servidor web IIS.

Observação

Para visualizar um ficheiro de projeto (por exemplo, ContactManager.Mvc.csproj) no Visual Studio 2010, primeiro precisa de descarregar o projeto da sua solução. Na janela do Explorador de Soluções , clique com o botão direito no nó do projeto e depois clique em Descarregar o Projeto. Clique com o botão direito no nó do projeto novamente e depois clique em Editar[ficheiro do projeto]). O ficheiro do projeto será aberto na sua forma XML bruta. Lembra-te de recarregar o projeto quando terminares.
Para mais informações sobre alvos, tarefas e instruções de importação do MSBuild, consulte Compreender o Ficheiro do Projeto. Para uma introdução mais aprofundada aos ficheiros de projeto e ao WPP, consulte Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build de Sayed Ibrahim Hashimi e William Bartholomew, ISBN: 978-0-7356-4524-0.

O que é um Pacote de Implementação Web?

Quando constrói e implementa um projeto de aplicação web, seja usando Visual Studio 2010 ou usando diretamente o MSBuild, o resultado final é tipicamente um pacote de implementação web. O pacote de implementação web é um ficheiro .zip. Contém tudo o que o IIS e o Web Deploy precisam para recriar a sua aplicação web, incluindo:

  • A saída compilada da sua aplicação web, incluindo conteúdo, ficheiros de recursos, ficheiros de configuração, JavaScript e recursos de folhas de estilo em cascata (CSS), e assim por diante.
  • Assemblies para o seu projeto de aplicação web, bem como para quaisquer projetos referenciados na sua solução.
  • Scripts SQL para gerar quaisquer bases de dados que estejas a implementar com a tua aplicação web.

Depois de gerado o pacote de implantação web, pode publicá-lo num servidor web IIS de várias formas. Por exemplo, pode implementá-lo remotamente direcionando o serviço Web Deploy Remote Agent ou o Web Deploy Handler no servidor web de destino, ou pode usar o IIS Manager para importar manualmente o pacote no servidor web de destino. Para mais informações sobre estas abordagens de implementação, consulte Escolher a Abordagem Certa para a Implementação Web.

Como funciona o processo de construção?

Isto mostra o que acontece quando constrói e empacota um projeto de aplicação web:

O que acontece quando constróis e embalas um projeto de aplicação web?

Quando constrói um projeto de aplicação web, o processo de compilação gera um ficheiro chamado [nome do projeto].SourceManifest.xml. Juntamente com o ficheiro do projeto e a saída da compilação, este ficheiro.SourceManifest.xml diz ao Web Deploy o que precisa de incluir no pacote de implementação web. Utilizando estas entradas, o Web Deploy gera um pacote de implantação web chamado [nome do projeto].zip.

Juntamente com o pacote de implementação web, o processo de compilação gera dois ficheiros que podem ajudar a usar o pacote:

  • O ficheiro .deploy.cmd inclui um conjunto de comandos parametrizados Web Deploy (MSDeploy.exe) que publicam o seu pacote de implantação web para um servidor web IIS remoto. Executar o ficheiro .deploy.cmd , com parâmetros apropriados, normalmente oferece uma alternativa mais rápida e fácil a construir manualmente os comandos MSDeploy.exe por si próprio.
  • O ficheiroSetParameters.xml fornece um conjunto de valores de parâmetros ao comando MSDeploy.exe. Estes valores incluem propriedades como o nome da aplicação web IIS para a qual pretende implementar o pacote, os valores de quaisquer endpoints de serviço e cadeias de ligação definidas no ficheiro web.config, e quaisquer valores de propriedade de implementação definidos nas páginas de propriedades do projeto.

O ficheiroSetParameters.xml é fundamental para gerir o processo de implementação. Este ficheiro é gerado dinamicamente de acordo com o conteúdo do seu projeto de aplicação web. Por exemplo, se adicionares uma string de ligação ao teu ficheiroweb.config , o processo de compilação irá detetar automaticamente a string de ligação, parametrizar a implementação em conformidade e criar uma entrada no ficheiroSetParameters.xml para permitir que modifiques a string de ligação como parte do processo de deployment. O tópico seguinte, Configuring Parameters for Web Package Deployment, explica o papel deste ficheiro com mais detalhe e descreve as diferentes formas de o modificar durante a compilação e a implementação.

Observação

No Visual Studio 2010, o WPP não suporta a pré-compilação das páginas numa aplicação web antes da embalagem. A próxima versão do Visual Studio e do WPP incluirão a capacidade de pré-compilar uma aplicação web como opção de empacotamento.

Conclusion

Este tópico forneceu uma visão geral do processo de construção e empacotamento para projetos de aplicações web no Visual Studio 2010. Descreveu como o WPP permite invocar comandos Web Deploy do MSBuild, e explicou como funciona o processo de compilação e empacotamento.

Depois de criar um pacote de implantação web, o próximo passo é implementá-lo. Para mais informações sobre isto, consulte Configuração de Parâmetros para Implementação de Pacotes Web e Implementação de Pacotes Web.

Leitura adicional

Os tópicos seguintes deste tutorial, Configuração de Parâmetros para a Implementação de Pacotes Web e Implementação de Pacotes Web, fornecem orientações sobre como usar o pacote web que criou. O tutorial final desta série, Advanced Enterprise Web Deployment, fornece orientações sobre como personalizar e resolver o processo de empacotamento.

Para uma introdução mais aprofundada aos ficheiros de projeto e ao WPP, consulte Inside the Microsoft Build Engine: Using MSBuild and Team Foundation Build de Sayed Ibrahim Hashimi e William Bartholomew, ISBN: 978-0-7356-4524-0.