Multi-targeting

Éste es el tercer post de una serie sobre VS 2010 y .NET 4

En el post de hoy veremos el soporte de Multi-targeting de VS 2010 - que nos permite crear aplicaciones para varias versiones de .NET. Hicimos un enorme trabajo arquitectural en Vs 2010 para permitir varias características de multi-targeting, consiguiendo una experiencia mucho mejor.

Entender el Side-by-Side

VS 2010 puede instalarse junto a otras versiones anteriores de Visual Studio (esto es el side-by-side). Lo que significa que podemos tener instalada en la misma máquina Vs 2008, Vs 2005 y Vs 2003 - y usar la versión que queramos cuando queramos.

.NET 4.0 también puede instalarse side-by-side con otras versiones de .NET en la misma máquina. .NET 4.0 tiene un nuevo número de versión tanto para las librerías del framework como para el motor CLR - lo que quiere decir que se ejecuta completamente a parte de .NET 2.o, .NET 3.0 y .NET 3.5. Lo que significa que podemos tener instalado .NET 4. en una máquina que tenga instaladas .NET 2.0, .NET 3.0 y .NET 3.5, y configurar algunas aplicaciones para que se ejecuten con .NET 4.0 y otras aplicaciones para que se ejecuten con otras versiones de .NET (la herramienta de administración del IIS nos permite configurar esto en aplciaciones ASP.NET). Esto nos permite usar .NET 4.0 para nuevas aplicaciones - sin tener que testear o actualizar ninguna de las aplicaciones existentes.

Multi-Targeting en VS 2008

VS 2008 fué la primera versión de Visual Studio que incluía esta nueva característica. Esto significaba que podíamos usar VS 2008 para crear y editar no sólo projectos de .NET 3.5, sino que también para proyectos de .NET 2.0 y 3.5. Esto permitía a los desarrolladores actualizarse más rápidamente y aprovechar las nuevas características de Visual Studio - sin tener que instalar una versión nueva de .NET en las máquinas donde se ejecutan nuestras aplicaciones.

El soporte de Multi-targeting de VS 2008 era capaz de aprovechar el hecho de tanto .NET 2.0, .NET 3.0 y .NET 3.5 se ejecutaban en la misma versión del CLR - y esa era la principal diferencia entre las nuevas versiones de .NET en sus librerías. Como resultado, los compiladores de Visual Studio eran capaces de generar el mismo IL, el depurador era capaz de depurar contra el mismo CLR, y el soporte de multitargeting del IDE estaba centrado en filtrar los nuevos assemblies y plantillas de proyectos cuando no estaban soportados por cierta versión de .NET.

Esta experiencia de multi-targeting funcionó - aunque no era perfecta. El intellisense de VS 2008 siempre mostraba los tipos y miembros de .NET 3.5 en una librería del framework (aunque estemos en un proyecto para .NET 2.0). Esto significaba que algunas veces sin darnos cuenta podíamos usar un método que sólo existía en ASP.NET 3.5 aunque estemos trabajando en un proyecto de ASP.NET 2.0

Multi-targeting en VS 2010

Hemos hecho algunos cambios arquitecturales en VS 2010 para mejorar el soporte de multi-targeting.

VS 2010 viene con lo que llamamos "reference assemblies" para cada versión de .NET. Un "reference assembly" contiene sólo los metadatos de un assembly particular del framework - y no su implementación actual (haciendo mucho más pequeño su tamaño). Estos metadatos son suficientes para segurarnos de que VS 2010 no se equivocará nunca en el intellisense cuando trabajemos con una versión concreta del framework. También significa que se mostrará el grid de propiedades adecuado en los diseñadores, listados de APIs en el explorador de objetos, y en todas las partes del IDE donde haga falta se mostrarán la información correspondiente a la versión del framework con la que se esté trabajando.

También hemos actualizado el depurador de VS 2010, el profiler y los compiladores para que sean capaces de trabajar con todas las versiones del CLR.

Usar el soporte de multi-targeting de VS 2010

Para ver mejor cómo funciona esto, crearesmo una aplicación web ASP.NET con VS 2010. Para esto le damos a "File->New Project" para que nos aparezca el menú "New Project". Usaremos el desplegable marcado para filtrar las plantillas de proyecto para que sólo muestre los que están soportados para .NET 2.0. Y entonces creamos una aplicación web ASP.NET 2.0.

Como estamos trabajando con .NET 2.0 en este proyecto, VS 2010 filtará la barra de herramientas y el intellisense del markup para sólo permitirnos usar los controles que se incluían en ASP.NET 2.0. Al contrario que en VS 2008, el grid de propiedades de VS 2010 filtra automáticamente aquellas propiedades que estaban soportadas en el control Button de ASP.NET 2.0.

Cuando escribimos código, VS 201o tan sólo nos mostrará aquellos tipos y metodos/propiedades/eventos soportados en .NET 2.0. Aquí podemos ver el intellisense para el objeto Response de ASP.NET 2.0 cuando escribimos "Response.Re":

Cuando ejecutamos la aplicación en el servidor web integrado en VS, se ejcutará usando la versión de ASP.NET2.0 (y el depurador de VS 2010 depurará el proceso con el CLR 2.0):

Mover un proyecto de .NET 2.0 a .NET 4.0

Opcionalmente podemos reenlazar nuestro proyecto para que funcione a una versión más actual de .NET tan sólo haciendo clic derecho en el proyecto en el explorador de soluciones y viendo sus propiedades. Podemos seleccionar el deplegable "Target Framework" y seleccionar la versión del framework que quereamos:

Podemos elegir cualquier versión del framework. En esa lista se incluye la versión "Server Core" que soporte la versión sin interfaz de usuario de Windows Server 2008 R2 - que no soporta alguna que otra API. Como los reference assemblies que usamos para los metadatos y el intellisense puede soportar cualquier versíon, hemos sido capaces de distribuir versiones de ellos con service packs futuros si introducen nuevas APIs (con un 100% de exito).

Para ver esto en marcha, vamos a cambiar el proyecto para que use .NET 4.0. Cuando hacemos esto, VS 2010 actualiza los asemblies referenciados y el web.config de nuestro proyecto para la versión correcta.

Una vez que hacemos esto, VS 2010 filtrará de nuevo el cuadro de herramientas y el intellisense del markup para mostrarnos los nuevos controles y propiedades disponibles en .NET 4.0. Por ejemplo, el grid de propiedades ahora nos muestra la nueva propiedad "ClientIDMode" disponibles en todos los contorles de ASP.NET 4.0 - que nos permite controlar cómo va  a ser el id en cliente evitando ids "feos" (una nueva característica de ASP.NET 4.0 que veremos en un próximo post.):

Ahora que hemos actualizado nuestro proyecto para .NET 4.0, VS 2010 nos muestra en el intellisense los nuevos tipos y métodos/propiedades/eventos de .NET 4.0. Por ejemplo, aquí podéis ver algunos de los métodos de redirección disponibles en ASP.NET 4.0 en el objeto Response (que ántes no había en .NET 2.0):

El nuevo método Response.RedirectPermanent()  hace más sencillas las respuestas típicas "HTTP 301 Moved" - lo que permite que el sitio no acumule enlaces "malos" en los motores de búsqueda). El motor de URL Routing está soportado tanto en aplicaiciones ASP.NET Web Forms como en ASP.NET MVC, y el nuevo método Response.RedirectToRoute() nos permite redirigir a una ruta asociada a ella.

Y finalmente cuando ejecutamos la aplicación en el servidor web de VS 2010, veremos que está usando .NET 4.0:

Resumen

El multi-targeting de VS 2010 nos permite trabajar con proyectos de NET 4.0, .NET 3.5, .NET 3.0 y .NET 2.0. Nos permitirá aprovechar las nuevas características del IDE, sin tener que actulaizar los proyectos, clientes y servidores que ejecuten nuestras aplicaciones. La mejora del soporte para multi-targeting asegura que esta experiencia sea mejor que ántes.

Espero que sirva.

P.D.: he estado usando Twitter más reciente mente para hacer post rápidos y compartir enlaces. Podéis seguirme en Twitter en http://www.twitter.com/scottgu (@scottgu es nombre en twitter).

Traducido por: Juan María laó Ramos.

Artículo original.

Un pensamiento en “Multi-targeting

  1. Pingback: Serie sobre VS 2010 y .NET 4.0 « Thinking in .NET

Deja un comentario