Archive for March, 2009
Formulario con Forma (Form Form) en VB.NET
Sunday, March 22nd, 2009TDD Paso a Paso utilizando VSTS
Sunday, March 22nd, 2009Introducción
Desde hace un tiempo eXtreme Programming ha comenzado a cambiar los hábitos clásicos de los equipos de desarrollo. Uno de los pilares de esta metodología se centra sobre el aumento de la productividad de los equipos de desarrollo. Este aumento se puede lograr (en gran parte) si los equipos trabajan utilizando una nueva técnica de trabajo denominada Test Development Driven (TDD).
Hace unos meses, configurar un entorno TDD, era una tarea complicada; pero desde la llegada de Visual Studio 2005 y Team Foundation Server (TFS), esta tarea se simplifica muchísimo.
Luego de estar probando durante mucho tiempos las versiones Beta de estos productos, finalmente pude participar en un proyecto donde aplicásemos una metodología ágil, integrados con TFS.
El objetivo de este artículo es demostrar paso a paso como se puede utilizar Visual Studio Team System, en un proceso de desarrollo ágil, que contemple la creación de un componente, sus pruebas y los sucesivos pasos de integración hasta el proceso de Continuous Integration.
Creación de un componente de ejemplo
Lo primero que haremos es crear un nuevo proyecto Visual Basic Net (imagen 1), para esto abrimos Visual Studio y seleccionamos las siguientes opciones:
1. Menú File -> New -> Project
2. Seleccionamos Visual Basic, y dentro la opción Windows; el tipo de proyecto seráClass Library
3. Definimos el nombre del proyecto; a modo de ejemplo lo hemos llamadoTDDEjemplo
Dentro de nuestro proyecto renombramos la clase con el nombre “Labs” y agregamos el siguiente código de ejemplo:
Public Class Labs
”
” Obtiene un mensaje de informacion
”
” Obtiene un mensaje de informacion
Public Function ObtenerInformacion() As String
Return “Hola Mundo”
End Function
”
” Retorna el nombre completo a partir de un Nombre y un Apellido
”
” Nombre
” Apellido
” Retorna el nombre completo a partir de un Nombre y un Apellido
Public Function CrearNombreCompleto(ByVal Nombre As String, ByVal Apellido As String) As String
Return Nombre & “, ” & Apellido
End Function
End Class
Hemos agregado 2 funciones ObtenerInformacion y CrearNombreCompleto, que utilizaremos para integrar nuestro proyecto de pruebas en un proceso TDD.
Creación de un proyecto de pruebas unitarias
El siguiente paso es crear un proyecto que nos permita probar la funcionalidad del proyecto TDDEjemplo. Para eso crearemos una serie de pruebas unitarias (Unit Tests), que servirán como base para evaluar el funcionamiento correcto de las funciones que creamos en el paso anterior. Para esto posicionamos el cursor en la línea de definición de una de las funciones y desplegamos el menú contextual, y seleccionamos la opción Create Unit Tests
Nota: otra de las opciones que poseemos es la opción Rename, esta opción nos permite renombrar el nombre de la función y reemplazar este nombre en todos los lugares donde se utilice la función. Esta acción es un caso de Refactoring.
El siguiente formulario nos permite seleccionar las funciones sobre las cuales queremos crear los Tests unitarios. En este caso seleccionamos ambas funciones

Selección de funciones para las pruebas unitarias
Las funciones con los Tests unitarios se crearan en un nuevo proyecto, en la opción para definir el nombre ingresamos TDDEjemploTest
.
Esta opción nos agrega un nuevo proyecto a la solución y le agrega como referencia el proyecto TDDEjemplo, además agrega dentro de la solución una serie de nuevos elementos.

Solución con el nuevo proyecto de pruebas
En el nuevo proyecto de pruebas, se ha creado una clase LabsTest.vb que posee las siguientes pruebas unitarias;
Clase Labs.vb&nbps;&nbps;&nbps;Clase LabsTests.vb
ObtenerInformacion&nbps;&nbps;&nbps;&nbps;&nbps;ObtenerInformacionTest
CrearNombreCompleto&nbps;&nbps;&nbps;&nbps;&nbps;CrearNombreCompletoTest
Las nuevas funciones utilizan la libreríaMicrosoft.VisualStudio.QualityTools.UnitTestFramework, que ha sido incluida dentro de la suite de Visual Studio 2005, para la ejecución de pruebas unitarias. El asistente crea las nuevas funciones implementando una llamada a la función que se quiere probar y generando el código necesario para el mismo.
Por ejemplo la función CrearNombreCompletoTest; incluye la definición de las variables Nombre y Apellido, adicionalmente se agrega como tarea inicializar los valores de estas variables.
”
”A test for CrearNombreCompleto(ByVal String, ByVal String)
”
_
Public Sub CrearNombreCompletoTest()
Dim target As Labs = New Labs
Dim Nombre As String = Nothing ‘TODO: Initialize to an appropriate value
Dim Apellido As String = Nothing ‘TODO: Initialize to an appropriate value
Dim expected As String = Nothing
Dim actual As String
actual = target.CrearNombreCompleto(Nombre, Apellido)
Assert.AreEqual(expected, actual, “TDDEjemplo.Labs.CrearNombreCompleto did not return the expected value.”)
Assert.Inconclusive(“Verify the correctness of this test method.”)
End Sub
Para poder probar esta función completaremos los valores de estas variables y también la variable expected, que es la que almacena el valor esperado para luego comparar con el resultado de la ejecución de la prueba.
El código final quedaría como en el siguiente ejemplo:
”
”A test for CrearNombreCompleto(ByVal String, ByVal String)
”
_
Public Sub CrearNombreCompletoTest()
Dim target As Labs = New Labs
Dim Nombre As String = “Bruno”
Dim Apellido As String = “Capuano”
Dim expected As String = “Bruno, Capuano”
Dim actual As String
actual = target.CrearNombreCompleto(Nombre, Apellido)
Assert.AreEqual(expected, actual, “TDDEjemplo.Labs.CrearNombreCompleto did not return the expected value.”)
End Sub
”
”A test for ObtenerInformacion()
”
_
Public Sub ObtenerInformacionTest()
Dim target As Labs = New Labs
Dim expected As String = “Hola Mundo”
Dim actual As String
actual = target.ObtenerInformacion
Assert.AreEqual(expected, actual, “TDDEjemplo.Labs.ObtenerInformacion did not return the expected value.”)
End Sub
Nota: el generador de pruebas unitarias agrega además de la prueba de la función la siguiente sentencia Assert.Inconclusive(…), para verificar que se complete el código de la prueba unitaria; esta línea debe ser eliminada luego de implementada la prueba unitaria ya que la misma no retornará un resultado exitoso si se deja esta llamada.
Una vez que hemos completado la definición de las prueba unitarias podemos ejecutar las mismas para evaluar si nuestro componente TDDEjemplo.Labsfunciona correctamente. Para lanzar el proceso de ejecución de pruebas unitarias debemos seleccionar:
Menú Test -> Start Selected Test Project with Debugger
Si no hemos cometido ningún error y las pruebas validan esta definición, el resultado debe ser exitoso y lo podremos visualizar en la ventana de Test Results;

Ejecución exitosa de las pruebas unitarias.
Si en cambio hemos tenido algún error o hemos dejado la llamadaAssert.Inconclusive(…), podremos ver alguno de los siguientes resultados:
Tratamiento de Errores haciendo uso de excepciones en Visual Basic .NET (Valido para las versiones 2003 y 2005 de VS.NET)
Sunday, March 22nd, 2009Saber que versión del .NET Framework estamos utilizando
Sunday, March 22nd, 2009| En primer lugar saludos a toda la comunidad de desarrolladores de .NET y los que no son de .NET también, en este artículo (el cual es muy sencillo) pretendo mostrar un uso muy importante que nos brinda la clase Environment, esta nos permite revisar que versión del framework tenemos instalado en nuestro equipo. | ||||||
| En caso que sea desde una WindowsApplication
Sin mas preámbulos nos dirigimos a lo que nos interesa el código, este lo podemos hacer desde un Button. Código en VB.NET ’Mostramos la informacion en un MessageBox End Sub
En caso de que la quieras mostrar en una ConsoleApplication El Codigo es el siguiente
El porque de esto: Con la salida de VS.NET la programacion Windows dio un giro de 360 grados en cuanto a Performance, Codigo manejado, Diseño y Estructura y algo muy importante Distribucion, asi es, a la hora de distribuir nuestro ejecutable debemos verificar que este corra bajo el mismo Framework en el que fue trabajado, ademas esto lo podemos agregar como una caracteristica utilitaria a las aplicaciónCliente/Servidor que realicemos. |
||||||
Herencia en VB.NET (Aplicada al diseño de Form)
Sunday, March 22nd, 2009| No se trata de dinero ni nada por el estilo, es que en la programación orientada a objetos (POO) existe algo que los lenguajes utilizan llamado “Herencia” que al igual como nosotros heredamos características de nuestros padres, en este caso en VB.NET se hereda la misma forma en el diseño de los Formularios. Esto de la herencia no es nuevo ya lenguajes como JAVA lo vienen implementando desde sus comienzos. | ||||||
| Pero si es nuevo (y de paquete) para los lenguajes de Microsoft y en este caso los lenguajes de .NET (VB,C#,C++), excluyo al JSharp(J#), porque es un derivado de JAVA y este ya lo usa desde sus comienzos. Este tema puede tornarse muy complicado según vamos avanzando en el, pero, esta vez no nos complicaremos la vida y veremos la herencia de diseños de Forms.
Lo primero que debemos hacer es abrir nuestro Visual Studio .NET 2003, luego, elegimos el lenguaje que vayamos a usar (en este caso será Visual Basic (VB)), elegimos WindowsApplication (o Windows Forms). Una vez ya hayamos hecho esto, procedemos a darle una forma como esta al Formulario Padre que es del cual vamos a heredar la forma. Tendrá un aspecto como este:
Luego de que terminemos de darle ese aspecto (ese fue el que yo le di, si quieres puedes darle el que se te antoje). Procedemos a agregar otro WindowsForm y luego que ya lo tengamos agregado a nuestro Proyecto o Solución identificamos una parte de código que se llama Inherits System.Windows.Forms.Form, este es el que trae por defecto solo le cambiamos lo que sigue después de Inherits por el nombre del Formulario que queramos heredar, en este caso será el Form1.vb, seria de esta manera: Inherits Form1 Luego compilamos en modo Debug que es un modo de prueba revisamos elForm2 y tendra el mismo aspecto que el Form1 veamos la siguiente imagen.
Luego que hayamos terminado esto, si nos fijamos el Formulario Hijo hereda la misma forma que el Formulario Padre pero hay que tener en cuenta varias cosas. 1. No se hereda código de ningún objeto 2. Al realizar el “Inherits” el Formulario que hereda tendrá todos los elementos bloqueados, para solucionar esto nos dirigimos al Formulario Padre (Form1) y en este los objetos tienen una propiedad que se llama Modifiers que trae por defecto Friend le decimos que es igual a Protected y listo (esto es a cada uno de los objetos que queramos heredar), luego compilamos nuevamente en modoDebug , revisamos y ya estos estarán disponibles para poder editarlos y usarlos NOTA: no puedes cambiarle el nombre ya que el interpretador de código del Framework se guía por ahí, para poder hacer la identificación del objeto en herencia y el correcto funcionamiento de este. |
||||||
TDD Paso a Paso utilizando VSTS
Sunday, March 22nd, 2009Introducción
Desde hace un tiempo eXtreme Programming ha comenzado a cambiar los hábitos clásicos de los equipos de desarrollo. Uno de los pilares de esta metodología se centra sobre el aumento de la productividad de los equipos de desarrollo. Este aumento se puede lograr (en gran parte) si los equipos trabajan utilizando una nueva técnica de trabajo denominada Test Development Driven (TDD).
Hace unos meses, configurar un entorno TDD, era una tarea complicada; pero desde la llegada de Visual Studio 2005 y Team Foundation Server (TFS), esta tarea se simplifica muchísimo.
Luego de estar probando durante mucho tiempos las versiones Beta de estos productos, finalmente pude participar en un proyecto donde aplicásemos una metodología ágil, integrados con TFS.
El objetivo de este artículo es demostrar paso a paso como se puede utilizar Visual Studio Team System, en un proceso de desarrollo ágil, que contemple la creación de un componente, sus pruebas y los sucesivos pasos de integración hasta el proceso de Continuous Integration.
Creación de un componente de ejemplo
Lo primero que haremos es crear un nuevo proyecto Visual Basic Net (imagen 1), para esto abrimos Visual Studio y seleccionamos las siguientes opciones:
1. Menú File -> New -> Project
2. Seleccionamos Visual Basic, y dentro la opción Windows; el tipo de proyecto seráClass Library
3. Definimos el nombre del proyecto; a modo de ejemplo lo hemos llamadoTDDEjemplo
Dentro de nuestro proyecto renombramos la clase con el nombre “Labs” y agregamos el siguiente código de ejemplo:
Public Class Labs
”
” Obtiene un mensaje de informacion
”
” Obtiene un mensaje de informacion
Public Function ObtenerInformacion() As String
Return “Hola Mundo”
End Function
”
” Retorna el nombre completo a partir de un Nombre y un Apellido
”
” Nombre
” Apellido
” Retorna el nombre completo a partir de un Nombre y un Apellido
Public Function CrearNombreCompleto(ByVal Nombre As String, ByVal Apellido As String) As String
Return Nombre & “, ” & Apellido
End Function
End Class
Hemos agregado 2 funciones ObtenerInformacion y CrearNombreCompleto, que utilizaremos para integrar nuestro proyecto de pruebas en un proceso TDD.
Creación de un proyecto de pruebas unitarias
El siguiente paso es crear un proyecto que nos permita probar la funcionalidad del proyecto TDDEjemplo. Para eso crearemos una serie de pruebas unitarias (Unit Tests), que servirán como base para evaluar el funcionamiento correcto de las funciones que creamos en el paso anterior. Para esto posicionamos el cursor en la línea de definición de una de las funciones y desplegamos el menú contextual, y seleccionamos la opción Create Unit Tests
Nota: otra de las opciones que poseemos es la opción Rename, esta opción nos permite renombrar el nombre de la función y reemplazar este nombre en todos los lugares donde se utilice la función. Esta acción es un caso de Refactoring.
El siguiente formulario nos permite seleccionar las funciones sobre las cuales queremos crear los Tests unitarios. En este caso seleccionamos ambas funciones

Selección de funciones para las pruebas unitarias
Las funciones con los Tests unitarios se crearan en un nuevo proyecto, en la opción para definir el nombre ingresamos TDDEjemploTest
.
Esta opción nos agrega un nuevo proyecto a la solución y le agrega como referencia el proyecto TDDEjemplo, además agrega dentro de la solución una serie de nuevos elementos.

Solución con el nuevo proyecto de pruebas
En el nuevo proyecto de pruebas, se ha creado una clase LabsTest.vb que posee las siguientes pruebas unitarias;
Clase Labs.vb&nbps;&nbps;&nbps;Clase LabsTests.vb
ObtenerInformacion&nbps;&nbps;&nbps;&nbps;&nbps;ObtenerInformacionTest
CrearNombreCompleto&nbps;&nbps;&nbps;&nbps;&nbps;CrearNombreCompletoTest
Las nuevas funciones utilizan la libreríaMicrosoft.VisualStudio.QualityTools.UnitTestFramework, que ha sido incluida dentro de la suite de Visual Studio 2005, para la ejecución de pruebas unitarias. El asistente crea las nuevas funciones implementando una llamada a la función que se quiere probar y generando el código necesario para el mismo.
Por ejemplo la función CrearNombreCompletoTest; incluye la definición de las variables Nombre y Apellido, adicionalmente se agrega como tarea inicializar los valores de estas variables.
”
”A test for CrearNombreCompleto(ByVal String, ByVal String)
”
_
Public Sub CrearNombreCompletoTest()
Dim target As Labs = New Labs
Dim Nombre As String = Nothing ‘TODO: Initialize to an appropriate value
Dim Apellido As String = Nothing ‘TODO: Initialize to an appropriate value
Dim expected As String = Nothing
Dim actual As String
actual = target.CrearNombreCompleto(Nombre, Apellido)
Assert.AreEqual(expected, actual, “TDDEjemplo.Labs.CrearNombreCompleto did not return the expected value.”)
Assert.Inconclusive(“Verify the correctness of this test method.”)
End Sub
Para poder probar esta función completaremos los valores de estas variables y también la variable expected, que es la que almacena el valor esperado para luego comparar con el resultado de la ejecución de la prueba.
El código final quedaría como en el siguiente ejemplo:
”
”A test for CrearNombreCompleto(ByVal String, ByVal String)
”
_
Public Sub CrearNombreCompletoTest()
Dim target As Labs = New Labs
Dim Nombre As String = “Bruno”
Dim Apellido As String = “Capuano”
Dim expected As String = “Bruno, Capuano”
Dim actual As String
actual = target.CrearNombreCompleto(Nombre, Apellido)
Assert.AreEqual(expected, actual, “TDDEjemplo.Labs.CrearNombreCompleto did not return the expected value.”)
End Sub
”
”A test for ObtenerInformacion()
”
_
Public Sub ObtenerInformacionTest()
Dim target As Labs = New Labs
Dim expected As String = “Hola Mundo”
Dim actual As String
actual = target.ObtenerInformacion
Assert.AreEqual(expected, actual, “TDDEjemplo.Labs.ObtenerInformacion did not return the expected value.”)
End Sub
Nota: el generador de pruebas unitarias agrega además de la prueba de la función la siguiente sentencia Assert.Inconclusive(…), para verificar que se complete el código de la prueba unitaria; esta línea debe ser eliminada luego de implementada la prueba unitaria ya que la misma no retornará un resultado exitoso si se deja esta llamada.
Una vez que hemos completado la definición de las prueba unitarias podemos ejecutar las mismas para evaluar si nuestro componente TDDEjemplo.Labsfunciona correctamente. Para lanzar el proceso de ejecución de pruebas unitarias debemos seleccionar:
Menú Test -> Start Selected Test Project with Debugger
Si no hemos cometido ningún error y las pruebas validan esta definición, el resultado debe ser exitoso y lo podremos visualizar en la ventana de Test Results;

Ejecución exitosa de las pruebas unitarias.
Si en cambio hemos tenido algún error o hemos dejado la llamadaAssert.Inconclusive(…), podremos ver alguno de los siguientes resultados:

Ejecución con errores de las pruebas unitarias.
Fuente: http://www.netveloper.com/contenido2.aspx?IDC=307_0
Los espacios de nombres de .NET relacionados con acceso a datos
Sunday, March 22nd, 2009| Siempre que hagamos algo en .NET Framework será mediante las clases que este “marco” nos proporciona, esas clases siempre están contenidas en un espacio de nombres (namespace), que no es ni más ni menos que una forma de “contener” las distintas clases que podemos usar, pero de forma más o menos organizada. De esta forma, las clases de acceso a datos están todas contenidas en el espacio de nombres System.Data. En este espacio de nombres, a su vez existen otros espacios de nombres que contienen clases especializadas según el proveedor de datos que queramos usar, por tanto tendremos espacios de nombres para el acceso a datos de base SQL Server mediante el espacio de nombresSystem.Data.SqlClient o para acceder a bases de datos Oracle, las clases especializadas están incluidas en System.Data.OracleClient, aunque siempre tendremos la posibilidad de acceder de forma genérica usando las clases proporcionadas por el espacio de nombres System.Data.OleDb, las cuales nos permitirán también acceder a las bases de datos de Access. Las clases para la manipulación de los datos Estos espacios de nombres especializados nos permiten conectar con la base de datos, traer los datos indicados a la memoria y después de manipularlos, guardarlos en la base de datos, si es que realmente hemos hecho algún cambio, inserción o eliminación. Manipulación de datos en modo desconectado Lo habitual es que la manipulación de datos la hagamos en modo desconectado, que es como sería usando las clases que hemos indicado en el párrafo anterior. Veamos con ejemplos cómo realizar cada una de estas tareas, tanto para acceder a una base de datos de SQL |
|||||
| Fuente: http://www.netveloper.com/contenido2.aspx?IDC=181_0 |
|||||
Silverlight 2.0 Beta 2 no se integra correctamente con ADO .net Entity Framework
Sunday, March 22nd, 2009| Resumen post:No hace mucho que Microsoft publicó el Service Pack 1 de Visual Studio 2008, uno de las características más esperadas de este service pack es la RTM de ADO .net Entity Framework. ¿ Se integra esta tecnología con Silverlight + WCF? En teoría si, en la práctica… | ||
| Post: | ||
Nuevo Visual Studio 2008 y .NET Framework 3.5
Sunday, March 22nd, 2009Microsoft lanzó su nueva edición de Visual Studio 2008 acompañada de su herramienta principal .NET Framework 3.5, ambos han sido anunciados.
La nueva versión incorpora mas de 250 nuevas características que no se encuentran en las versiones Express de Visual Studio. Se agregó el soporte para LINQ (Language Integrated Query)
que es tomada como una aplicación rápida de desarrollo. Esta
herramienta ayuda para que el programador sepa que dato es el que
realmente necesita, en vez de estar pensando en la complejidad de las
solicitudes de datos. LINQ puede asociarse fácilmente con C# o Visual Basic con SQL.
También la nueva versión te permitirá abrir, editar y construir aplicaciones .NET 2.0 y ASP.NET 2.0 (incluyendo aplicaciones ASP.NET 2.0 usando ASP.NET AJAX 1.0).
La nueva versión de Framework 3.5 incluye características para el desarrollo de la Web 2.0, Service-Oriented Architecture
y software de servicios adicionales basados en aplicaciones. Su
lanzamiento general y venta al publico será hasta le próximo año, pero
si estás subscrito a MSDN, podrás bajar una versión Express de esta versión.
Diez cosas a saber sobre Visual Studio 2008 y .NET Framework 3.5
Sunday, March 22nd, 2009Días atrás, Daniel Moth, desarrollador de Microsoft, publicaba un interesante post comentando 10 puntos importantes a saber sobre el nuevo Visual Studio 2008 y .NET framework 3.5 y la verdad es que no tienen desperdicio.
1. Lanzamiento
Visual Studio 2008 y .NET framework 3.5 serán lanzados oficialmente juntos el próximo febrero. Sin embargo, estará disponible para desarrolladores a finales de noviembre de 2007.
Afortunadamente, estarán disponibles las versiones Express de C#, VB, C++ y Web, así como las Profesionales (¡con soporte de testeos unitarios!), Estándar y ediciones de equipos de desarrollo. La novedad será Visual Studio 2008 Shell, de carácter gratuito, que permitirá crear lenguajes y herramientas de desarrollo más verticalizadas.
Daniel comenta también que bajo Windows Vista, VS2008 será espectacular, e incluirá mejoras para la depuración de múltiples hilos. Ya no hay excusa para quedarnos con WXP ;-P
2. Compatibilidad hacia atrás
.NET framework 3.5 continúa la línea iniciada por Fx3.0 en cuanto al mantenimiento del CLR. Por tanto, y dado que lo único que hace es añadir ensamblados a las librerías presentes con las versiones 2.0 y 3.0 del framework, las aplicaciones actuales no se verán afectadas. Eso sí, necesitará los Service Packs 1 de ambas plataformas.
3. Generación multiplataforma
Visual Studio 2008 incluye la capacidad de crear proyectos para múltiples plataformas .NET, es decir, la 2.0, 3.0 y 3.5, desde el mismo entorno. Por tanto, no será necesario tener VS2005 instalado para generar ensamblados para .NET 2.0.
4. Multitud de novedades en C# 3.0 y VB9
Propiedades automáticas, delegados “relajados”, inicializadores de objetos, inferencia de tipos, tipos anónimos, métodos de extensión, funciones lambda y métodos parciales, entre otros.
Pero no sólo eso… dado el punto 3 (generación multiplataforma), podremos usar estas nuevas características de nuestros lenguajes favoritos y generar para .NET 2.0.
5. LINQ
Se trata de una de las grandes revoluciones que nos aportará este nuevo conjunto de herramientas. Language INtegrated Query es un nuevo método de acceso a datos totalmente integrado en nuestro lenguaje habitual y de una forma muy independiente de la fuente de donde provengan (colecciones, XML, motores de bases de datos, etc.).
6. Novedades para ASP.NET
Visual Studio, así como el nuevo framework, ya incluirán ASP.NET AJAX de serie, así como 3 nuevos controles (ListView, DataPager y LinqDataSource). Además, el IDE ha sido muy mejorado e incluye soporte para intellisense y depuración de Javascripts, ¡también para ASP.NET 2.0!, y un nuevo diseñador que permite anidar páginas maestras.
7. Para el desarrollo en cliente
VS2008 incluirá nuevas plantillas de proyectos, así como un diseñador para WPF integrado con soporte para la comunicación WPF-WinForms. También se ha añadido el soporte para Firefox de la tecnología ClickOnce yXBAP (XAML Browser Applications).
8. Para el desarrollador de Office
Se ofrece soporte total para la personalizaciones (customisations) de Office 2007, así como para las plantillas de Office 2003.
9. Para desarrollo en servidor
Se han incluido nuevas plantillas para WCF y WF, y se han introducido mejoras interesantes en el primero, como el modelo de programación HTTP (sin SOAP) o serialización JSON.
10. Para el desarrollo en dispositivos móviles
Hay decenas de nuevas características, como el soporte para las versiones compactas de LINQ y WPF, o, a nivel de IDE, Unit Testing for Devices.
11. (punto extra) Código del framework
Pues sí, como ya es sabido, podremos depurar nuestras aplicaciones siguiendo el rastro por el interior de las clases y métodos del framework (como si no tuviéramos suficiente con las nuestras
).










