Nuevos proyectos Web en Visual Studio 2005 Service Pack 1

martes, 30 de enero de 2007

En este mes Microsoft ha publicado el Service Pack 1 de Visual Studio.

Además de una larga lista de correciones menores al producto (ver la lista completa aquí) en el mismo se incorpora una alternativa interesante para la construcción de sitios web. La misma, que inicialmente se había publicado como un un add-in opcional de Visual Studio 2005, ahora se incorpora en las características base de la herramienta.


Web Application Projects

Es la posibilidad de definir una aplicación web mediante un proyecto (.csproj o .vbproj), tal como era habitual en las versiones previas del framework .NET. Puede leerse aquí una introducción al tema.

Esto se agrega como alternativa al manejo ya conocido en ASP.NET 2.0, de crear el sitio directamente basado en el sistema de archivos, sin un proyecto que enumere explícitamente sus componentes. Naturalmente este mecanismo sigue estando disponible luego de aplicar el Service Pack.

Esta diferencia aparentemente "menor" entre los dos tipos de proyecto tiene importantes consecuencias sobre el modelo de compilación, el ciclo de desarrollo / modificación / prueba de la aplicación, y la forma en que el sitio se incorpora a Visual Source Safe u otros sistemas de control de código integrados con la IDE de Visual Studio.



Cúando usar cuál?

Hay ventajas y desventajas de uno y otro modelo en diferentes escenarios, un análisis comparativo puede consultarse en esta sección del documento citado previamente.

En mi opinión -y esto es un terreno abierto a la discusión-, el modelo ahora disponible, basado en proyectos (en el cual hay una muy rápida reconstrucción del proyecto antes de cada prueba), es más adecuado para sitios chicos y medianos, y lo utilizo como "modelo por defecto" a menos que se de alguna de las siguientes condiciones.


  • Que la magnitud del sitio (cantidad de páginas) haga prohibitivo el tiempo de build -aún cuando en los nuevos proyectos web este tiempo es asombrosamente menor que en los sitios sin proyecto.
  • Que las necesidades de distribución -por ej. el acceso remoto a un hosting externo- requieran sí o sí actualizar páginas individuales sin redistribuir el sitio completo.

Y definitivamente trato de usar los nuevos proyectos web cuando se cumple alguna de estas condiciones

  • Necesidad frecuente de rebuild y validación del sitio completo ante los cambios en otros proyectos (librerias de clases base, proyectos de "back end", etc)
  • Participación simultánea de varios desarrolladores en un mismo proyecto web, u otras condiciones que hagan complejo entender cuándo puede reejecutarse la página modificada sin reconstruir el sitio y cuando es preferible el "rebuild" antes de probar.

Conversion de Web sites existentes a Web Application Projects

Esta tarea no es trivial, ya que además de ser necesario reconstruir la información del proyecto y sus referencias, cada página aspx y su código deben ser migradas al modelo de clase parciales con "code behind" generado por la herramienta de diseño.

La parte más tediosa del proceso es facilitada por un wizard, y algunos ajustes deben realizarse manualmente. Una guía detallada del proceso de conversión puede leerse aquí.



Cómo crear y configurar un proyecto de aplicación web

Como punto de partida, recordar que para crear una aplicacion web basada en proyecto, no debe usarse la opción "agregar nuevo sitio web" sino "agregar nuevo proyecto" y allí seleccionar como tipo de proyecto "aplicacion web ASP.NET".

Tal como en los web sites de ASP.NET 2.0, los proyectos web pueden ejecutarse mediante el host propio de Visual Studio -basado en el sistema de archivos- o en Internet Information Server. Esa configuración se define en una nueva solapa "Web" de las propiedades del proyecto.

Para terminar: en mi opinion, independientemente de la discusión de cuándo se justifica convertir un "web site" existente a un "web application project", definitivamente creo que vale la pena, a la hora de crear una nueva aplicación, conocer y poder optar entre ambos modelos.