[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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *