[HowTo]Obtener los Tipos de Proyecto de Visual Studio

Introducción

En mi anterior artículo explicaba la forma de agregar una nueva opción de menú a uno ya existente, dentro de un Addin para Visual Studio.

Siguiendo un poco con el tema de “extender” Visual Studio, vamos a ver como podemos obtener los distintos tipos de proyecto de una determinada versión de Visual Studio. (En el siguiente artículo, veremos como agregar un proyecto a una solución existente).

Código

Aunque he publicado el código en Code MSDN, me gustaría exponerlo aquí y explicarlo brevemente:

En primer lugar, será necesario que obtengamos el directorio donde se encuentra instalada la versión de Visual Studio que vamos a comprobar:

   1: private  void GetVSFolder()

   2: {

   3:     string VSVersion = VSVersions.GetVSVersion(Version);

   4:     string folder = String.Format("{0}{1}",RegistryPath,VSVersion);

   5:     InstallationFolder = Registry.GetValue(folder, "InstallDir", "").ToString();

   6: }

Dada una versión de Visual Studio, y la ruta de Registro de Windows “HKEY_LOCAL_MACHINESOFTWAREMicrosoftVisualStudio”, vamos a obtener el valor de la clave “Install Dir”, y la asignaremos a una propiedad de nuestra clase.

Dentro del código vamos a tener un enumerador de las distintas versiones de VS y un diccionario (Dictionary<string,string>) con la pareja versión y Nombre largo. La versión es el valor que vamos a utilizar para poder obtener el directorio de Instalación.

La clase va a contener una Propiedad de tipo Lista de cadenas (List<string>) que va a contener las distintas agrupaciones para los proyectos (WEB, CSharp, VisualBasic…). Para obtener dichos valores:

   1: private  void  GetProjectTypes()

   2:         {

   3:             if (String.IsNullOrWhiteSpace(InstallationFolder)) throw new Exception("El Directorio de Visual Studio no puede estar vacio.");

   4:             ProjectType = new List<string>();

   5:             foreach(var folder in System.IO.Directory.EnumerateDirectories(String.Format(@"{0}ProjectTemplates",InstallationFolder)))

   6:             {

   7:                 if (!ProjectType.Contains(folder)) ProjectType.Add(folder);

   8:             }

   9:  

  10:         }

Para tratar las distintas plantillas, he definido una clase “ProjectTemplate”:

   1: public class ProjectTemplate

   2:    {

   3:        public string TemplateName { get; set; }

   4:        public string TemplatePath { get; set; }

   5:        public string ProjectType { get; set; }

   6:        public override string ToString()

   7:        {

   8:            return String.Format("{0} - {1}", ProjectType, TemplateName);

   9:        }

  10:    }

Y dentro de la clase una propiedad de tipo Lista (List<ProjectTemplate>), que rellenaremos de la siguiente manera:

   1: private void GetProjectTemplates()

   2:         {

   3:             if (String.IsNullOrWhiteSpace(InstallationFolder)) throw new Exception("El Directorio de Visual Studio no puede estar vacio.");

   4:             ProjectTemplates = new List<ProjectTemplate>();

   5:             

   6:             foreach (var file in System.IO.Directory.EnumerateFiles(String.Format(@"{0}ProjectTemplates", InstallationFolder),"*"

   7:                                                                         ,System.IO.SearchOption.AllDirectories))

   8:             {

   9:                 var possition = file.IndexOf("ProjectTemplates")+17;

  10:                ProjectTemplates.Add( new ProjectTemplate { 

  11:                                             TemplatePath = file,

  12:                                             TemplateName = file.Substring(file.LastIndexOf(@"")+1),

  13:                                             ProjectType = file.Substring(possition,file.IndexOf(@"",possition)) 

  14:                                         }

  15:                                         ) ;

  16:  

  17:             }

  18:         }

 

Para utilizar este proyecto, bastaría con agregar la referencia a un nuevo proyecto, y para poder probarlo:

   1: VSInfo.VSInfo vs = new VSInfo.VSInfo(VSInfo.eVSVersions.VS2010);

   2:            foreach (var template in vs.ProjectTemplates)

   3:            {

   4:               Console.WriteLine(template.ToString());

   5:            }

 

Espero que os sea de utilidad.

 

Saludos

2 comentarios en “[HowTo]Obtener los Tipos de Proyecto de Visual Studio”

Deja un comentario

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