Compartir vía


Crear y empaquetar proyectos de aplicación web

Por Jason Lee

Cuando quiera implementar un proyecto de aplicación web en un entorno de servidor remoto, la primera tarea consiste en compilar el proyecto y generar un paquete de implementación web. En este tema se describe cómo funciona el proceso de compilación en los proyectos de aplicación web. En concreto, se explica lo siguiente:

  • Cómo la canalización de publicación web amplía el proceso de compilación para incluir una funcionalidad de implementación
  • Cómo Internet Information Services (IIS) Web Deployment Tool (Web Deploy) convierte la aplicación web en un paquete de implementación
  • Cómo funciona el proceso de compilación y empaquetado y qué archivos se crean

En Visual Studio 2010, la canalización de publicación web admite el proceso de compilación e implementación en proyectos de aplicaciones web. La canalización de publicación web proporciona un conjunto de destinos de Microsoft Build Engine (MSBuild) que amplían la funcionalidad de MSBuild y que permiten integrarlo con Web Deploy. En Visual Studio, esta funcionalidad extendida se puede ver en las páginas de propiedades del proyecto de aplicación web. Tanto la página Paquete/Publicar web como la página Package/Publicar SQL permiten configurar el modo en que se empaqueta el proyecto de aplicación web para la implementación cuando se completa el proceso de compilación.

The Package/Publish Web page, together with the Package/Publish S Q L page, lets you configure how your web application project is packaged for deployment when the build process is complete.

¿Cómo funciona la canalización de publicación web?

Si nos fijamos en el archivo de proyecto de un proyecto de aplicación web basado en C#, podemos ver que importa dos archivos .targets.

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

La primera instrucción Import es común a todos los proyectos de Visual C#. Este archivo, Microsoft.CSharp.targets, contiene destinos y tareas específicos de Visual C#. Por ejemplo, aquí es donde se invoca la tarea (Csc) del compilador de C#. A su vez, el archivo Microsoft.CSharp.targets importa el archivo Microsoft.Common.targets. Esto define destinos comunes a todos los proyectos, como Crear, Volver a compilar, Ejecutar, Compilar y Limpiar. La segunda instrucción Import es específica de los proyectos de aplicación web. A su vez, el archivo Microsoft.WebApplication.targets importa el archivo Microsoft.Web.Publishing.targets. Básicamente, el archivo Microsoft.Web.Publishing.targetses la canalización de publicación web. Define los destinos, como Package y MSDeployPublish, que invocan Web Deploy para completar diferentes tareas de implementación.

Para entender cómo se usan estos destinos adicionales, en la solución de ejemplo Contact Manager, abra el archivo Publish.proj y eche un vistazo al destino BuildProjects.

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

Este destino usa la tarea MSBuild para compilar varios proyectos. Fíjese en las propiedades DeployOnBuild y DeployTarget:

  • La propiedad DeployOnBuild=true significa esencialmente "quiero ejecutar un destino adicional cuando la compilación se complete correctamente".
  • La propiedad DeployTarget identifica el nombre del destino que desea ejecutar cuando la propiedad DeployOnBuild es igual a true. En este caso, estamos especificando que queremos que MSBuild ejecute el destino Package después de compilar el proyecto.

El destino Package se define en el archivo Microsoft.Web.Publishing.targets. Básicamente, este destino toma la salida de compilación del proyecto de aplicación web y la convierte en un paquete de implementación web que se puede publicar en un servidor web de IIS.

Nota:

Para ver un archivo de proyecto (por ejemplo, ContactManager.Mvc.csproj) en Visual Studio 2010, primero debe descargar el proyecto de la solución. En la ventana Explorador de soluciones, haga clic con el botón derecho en el nodo de proyecto y, a continuación, haga clic en Descargar proyecto. Haga clic con el botón derecho de nuevo en el nodo del proyecto y, a continuación, haga clic en Editar[archivo de proyecto]. El archivo del proyecto se abrirá en un formato XML sin formato. Recuerde volver a cargar el proyecto cuando haya terminado.
Para obtener más información sobre los destinos, las tareas y las instrucciones Import de MSBuild, consulte Descripción del archivo de proyecto. Para ver una introducción más detallada a los archivos del proyecto y WPP, consulte Dentro de Microsoft Build Engine: uso de MSBuild y Team Foundation Build de Sayed Ibrahim Hashimiy William Bartholomew, ISBN: 978-0-7356-4524-0.

¿Qué es un paquete de implementación web?

Al compilar e implementar un proyecto de aplicación web, ya sea mediante Visual Studio 2010 o mediante MSBuild directamente, el resultado final suele ser un paquete de implementación web. Este paquete de implementación web es un archivo .zip que contiene todo lo que IIS y Web Deploy necesitan para volver a crear la aplicación web, como lo siguiente:

  • La salida compilada de la aplicación web, incluidos el contenido, los archivos de recursos, los archivos de configuración, JavaScript y los recursos de hojas de estilos en cascada (CSS), etc.
  • Ensamblados para el proyecto de aplicación web y para cualquier proyecto al que se haga referencia dentro de la solución
  • Scripts SQL para generar las bases de datos que se van a implementar con la aplicación web

Una vez generado el paquete de implementación web, puede publicarlo en un servidor web de IIS de varias maneras. Por ejemplo, puede implementarlo de forma remota si tiene como destino el servicio Agente remoto de Web Deploy o el controlador de Web Deploy en el servidor web de destino, o bien puede usar el Administrador de IIS para importar el paquete manualmente al servidor web de destino. Para obtener más información sobre estos métodos de implementación, consulte Elegir el enfoque adecuado para la implementación web.

¿Cómo funciona el proceso de compilación?

Aquí se ilustra lo que sucede al compilar y empaquetar un proyecto de aplicación web:

What happens when you build and package a web application project.

Al compilar un proyecto de aplicación web, el proceso de compilación genera un archivo denominado [nombre del proyecto].SourceManifest.xml. Junto con el archivo de proyecto y la salida de compilación, este archivo .SourceManifest.xml indica a Web Deploy lo que necesita incluir en el paquete de implementación web. Con estas entradas, Web Deploy genera un paquete de implementación web denominado [nombre del proyecto].zip.

Junto con el paquete de implementación web, el proceso de compilación genera dos archivos que pueden ayudar a usar el paquete:

  • El archivo .deploy.cmd contiene un conjunto de comandos parametrizados de Web Deploy (MSDeploy.exe) que publican el paquete de implementación web en un servidor web remoto de IIS. La ejecución del archivo .deploy.cmd, con los parámetros adecuados, suele constituir una alternativa más rápida y sencilla a tener que construir los comandos MSDeploy.exe manualmente uno mismo.
  • El archivo SetParameters.xml proporciona un conjunto de valores de parámetro al comando MSDeploy.exe. Estos valores incluyen propiedades como el nombre de la aplicación web de IIS a la que desea implementar el paquete, los valores de los puntos de conexión de servicio y las cadenas de conexión definidos en el archivo web.config y cualquier valor de propiedad de implementación definido en las páginas de propiedades del proyecto.

El archivo SetParameters.xml es clave para administrar el proceso de implementación. Este archivo se genera dinámicamente según el contenido del proyecto de aplicación web. Por ejemplo, si agrega un cadena de conexión al archivo web.config, el proceso de compilación detectará automáticamente la cadena de conexión, parametrizará la implementación como corresponda y creará una entrada en el archivo SetParameters.xml para que pueda modificar la cadena de conexión como parte del proceso de implementación. En el tema siguiente, Configurar los parámetros para la implementación de paquetes web, se explica el rol de este archivo con más detalle y se describen las distintas formas en las que se puede modificar durante la compilación y la implementación.

Nota:

En Visual Studio 2010, WPP no admite la precompilación de las páginas en una aplicación web antes del empaquetado. La siguiente versión de Visual Studio y WPP sí incluirá la capacidad de precompilación de una aplicación web como opción de empaquetado.

Conclusión

En este tema se ha proporcionado información general sobre el proceso de compilación y empaquetado de proyectos de aplicaciones web en Visual Studio 2010. En él se ha descrito cómo WPP permite invocar comandos de Web Deploy desde MSBuild y se ha explicado cómo funciona el proceso de compilación y empaquetado.

Una vez creado un paquete de implementación web, el siguiente paso es implementarlo. Para obtener más información sobre esto, consulte Configurar los parámetros para la implementación de paquetes web e Implementar paquetes web.

Lecturas adicionales

En los siguientes temas de este tutorial, Configurar los parámetros para la implementación de paquetes web e Implementar paquetes web, se proporcionan instrucciones sobre cómo usar el paquete web que ha creado. El último tutorial de esta serie, Implementación web avanzada de empresa, contiene instrucciones sobre cómo personalizar el proceso de empaquetado y solucionar problemas al respecto.

Para ver una introducción más detallada a los archivos del proyecto y WPP, consulte Dentro de Microsoft Build Engine: uso de MSBuild y Team Foundation Build de Sayed Ibrahim Hashimiy William Bartholomew, ISBN: 978-0-7356-4524-0.