[Video] Modeling and Code Generation on the .Net platform

Hola!

Acaban de publicar en InfoQ el vídeo de la presentación que hice, junto con mi compañero Pedro J. Molina, en el Code Generation 2012, un evento que se celebra todos los años en Cambridge en el que se reúnen las principales empresas interesadas en el Model-Driven Software Development.

En nuestra presentación mostramos cómo usamos la plataforma .Net en Icinetic para construir herramientas de modelado y generación de código. Básicamente hicimos un recorrido sobre los aspectos a considerar a la hora de emprender el desarrollo de este tipo de herramientas, y revisamos los frameworks y utilidades que tenemos disponible en .Net sobre los que podemos apoyarnos para no hacerlo todo desde cero.

Para finalizar mostramos un par de demos de nuestra implementación específica de MDSD (Radarc), generando dos pequeños ejemplos de aplicaciones basadas en NServiceBus y WP7, respectivamente.

 

Code Generation 2012

[VSX] DTE How-to’s reunidos (I)

Hola! Siguiendo la estela del gran Carlos Quintero, con su auténtica enciclopedia online sobre Visual Studio Extensibility (que tantas horas nos ha ahorrado a algunos), intentaré ir documentando algunas de la operaciones de VSX más “tricky”.

 

How-To: “Add Item As Link” programmatically

 

La operación sobre Visual Studio consiste simplemente en seleccionar “Add” –> “Existing Item” sobre el elemento al que queremos agregar el link:

image

A continuación buscamos el archivo que queremos agregar como link y seleccionamos “Add As Link” en el selector del botón “Add”:

image

Y listo.

Pues bien, para hacer esto “programmatically” desde un package o una macro de VS, primero tenemos que obtener el “Project” o “ProjectItem” que albergará dicho link. Sobre cómo recorrer la estructura de proyectos y archivos de una solución hay documentación extensa, por ejemplo podemos consultar el siguiente recurso. Ambas interfaces, “Project” y “ProjectItem”, nos proporcionan una propiedad “ProjectItems” que representa la colección de sus elementos hijos en dicho árbol de soluciones. Sobre la colección “ProjectItems” podemos usar el método “AddFromFile”:

hostProjectOrProjectItem.ProjectItems.AddFromFile(realPathOfTheLinkedFile);

Si el elemento está en la ruta correspondiente al “Project” o “ProjectItem” sobre el que estamos ejecutando el método, se agregará el archivo sobre Visual Studio normalmente. Si las rutas no coinciden, el elemento será agregado como un link.

 

How-To: Obtener el path de un archivo alojado en una carpeta de soluciones

 

En la mayoría de los casos si tenemos un “ProjectItem” de una solución y accedemos al método “get_FileNames(0)” obtendremos la ruta del fichero al que representa en VS.

Sin embargo, si tenemos un “ProjectItem” cuyo padre es directamente una carpeta de soluciones como en este ejemplo:

 

image

La llamada a get_FileNames(0) provocará una excepción. En este caso concreto tendremos que hacer dicha llamada con index 1: get_FileNames(1)

 

How-To: Crear un ProjectTemplate con links

 

En el caso en que estemos creando plantillas de proyecto o solución que contengan links a rutas relativas, podemos ver como, al ser desplegadas, dichos links quedan rotos:

 

image

 

Simplemente el problema es que apuntan a la ruta desde la que estamos desplegando la plantilla, en lugar de a la nueva ruta donde la nueva solución se ha creado. Para evitar este problema podemos usar el atributo CreateInPlace:

 

image

 

Que nos permitirá que los links se actualicen a la ruta de la nueva solución.