Compartir vía


Generación de nuevos proyectos: Aspectos técnicos (parte 1)

¿Alguna vez has pensado en cómo crear tu propio tipo de proyecto? ¿Se pregunta qué ocurre realmente al crear un nuevo proyecto? Echemos un vistazo debajo de la capucha y veamos lo que realmente está pasando.

Hay varias tareas que visual Studio coordina para usted:

  • Muestra un árbol de todos los tipos de proyecto disponibles.

  • Muestra una lista de plantillas de aplicación para cada tipo de proyecto y le permite elegir una.

  • Recopila información del proyecto para la aplicación, como el nombre del proyecto y la ruta de acceso.

  • Pasa esta información al generador del proyecto.

  • Genera elementos y carpetas del proyecto en la solución actual.

Cuadro de diálogo Nuevo proyecto

Todo comienza cuando se selecciona un tipo de proyecto para un nuevo proyecto. Comencemos haciendo clic en Nuevo proyecto en el menú Archivo . Aparece el cuadro de diálogo Nuevo proyecto , con un aspecto similar al siguiente:

Screenshot of the New Project dialog box.

Veámoslo con más detalle. En el árbol Tipos de proyecto se enumeran los distintos tipos de proyecto que puede crear. Al seleccionar un tipo de proyecto como Visual C# Windows, verá una lista de plantillas de aplicación para empezar. Visual Studio instala plantillas instaladas y están disponibles para cualquier usuario del equipo. Las nuevas plantillas que cree o recopile se pueden agregar a Mis plantillas y solo están disponibles para usted.

Al seleccionar una plantilla como Aplicación de Windows, aparece una descripción del tipo de aplicación en el cuadro de diálogo; en este caso, un proyecto para crear una aplicación con una interfaz de usuario de Windows.

En la parte inferior del cuadro de diálogo Nuevo proyecto , verá varios controles que recopilan más información. Los controles que ve dependen del tipo de proyecto, pero generalmente incluyen un cuadro de texto Nombre del proyecto, un cuadro de texto Ubicación y un botón Examinar relacionado, y un cuadro de texto Nombre de solución y una casilla de verificación Crear directorio para la solución.

Rellenar el cuadro de diálogo Nuevo proyecto

¿De dónde obtiene la información el cuadro de diálogo Nuevo proyecto ? Hay dos mecanismos en funcionamiento aquí, uno de ellos en desuso. El cuadro de diálogo Nuevo proyecto combina y muestra la información obtenida de ambos mecanismos.

El método anterior (en desuso) usa entradas del Registro del sistema y archivos .vsdir. Este mecanismo se ejecuta cuando Se abre Visual Studio. El método más reciente usa archivos .vstemplate. Este mecanismo se ejecuta cuando Se inicializa Visual Studio, por ejemplo, mediante la ejecución de

devenv /setup

or

devenv /installvstemplates

Tipos de proyecto

La posición y los nombres de los nodos raíz de tipos de proyecto, como Visual C# y Otros lenguajes, viene determinado por las entradas del Registro del sistema. La organización de los nodos secundarios, como Database y Smart Device, refleja la jerarquía de las carpetas que contienen los archivos .vstemplate correspondientes. Echemos un vistazo primero a los nodos raíz.

Nodos raíz de tipo de proyecto

Cuando se inicializa Visual Studio, recorre las subclaves de la clave del Registro del sistema HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\NewProjectTemplates\TemplateDirs para compilar y asignar un nombre a los nodos raíz del árbol de tipos de proyecto. Esta información se almacena en caché para su uso posterior. Examine la tecla TemplateDirs\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\/1. Cada entrada es un GUID de VSPackage. El nombre de la subclave (/1) se omite, pero su presencia indica que se trata de un nodo raíz de tipos de Proyecto. A su vez, un nodo raíz puede tener varias subclaves que controlan su apariencia en el árbol Tipos de proyecto. Echemos un vistazo a algunos de ellos.

(Es el valor predeterminado).

Este es el identificador de recurso de la cadena localizada que denomina el nodo raíz. El recurso de cadena se encuentra en el archivo DLL satélite seleccionado por el GUID de VSPackage.

En el ejemplo, el GUID de VSPackage es

{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}

y el identificador de recurso (valor predeterminado) del nodo raíz (/1) es #2345

Si busca el GUID en la clave Packages cercana y examina la subclave SatelliteDll, puede encontrar la ruta de acceso del ensamblado que contiene el recurso de cadena:

<Ruta> de instalación de Visual Studio\VC#\VCSPackages\1033\csprojui.dll

Para comprobarlo, abra el Explorador de archivos y arrastre csprojui.dll al directorio de Visual Studio. La tabla de cadenas muestra que el recurso 2345 tiene el subtítulo Visual C#.

SortPriority

Esto determina la posición del nodo raíz en el árbol Tipos de proyecto.

SortPriority REG_DWORD 0x00000014 (20)

Cuanto menor sea el número de la prioridad, mayor será la posición del árbol.

DeveloperActivity

Si esta subclave está presente, el cuadro de diálogo Developer Configuración controla la posición del nodo raíz. Por ejemplo,

DeveloperActivity REG_SZ VC#

indica que Visual C# será un nodo raíz si Visual Studio está establecido para el desarrollo de Visual C++. De lo contrario, será un nodo secundario de Otros lenguajes.

Carpeta

Si esta subclave está presente, el nodo raíz se convierte en un nodo secundario de la carpeta especificada. Aparece una lista de carpetas posibles en la clave.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\NewProjectTemplates\PseudoFolders

Por ejemplo, la entrada Proyectos de base de datos tiene una clave Folder que coincide con la entrada Otros tipos de proyecto en PseudoCarpetas. Por lo tanto, en el árbol Tipos de proyecto, Proyectos de base de datos será un nodo secundario de Otros tipos de proyecto.

Nodos secundarios de tipo de proyecto y archivos .vstdir

La posición de los nodos secundarios en el árbol Tipos de proyecto sigue la jerarquía de las carpetas de las carpetas ProjectTemplates. Para las plantillas de máquina (plantillas instaladas de Visual Studio), la ubicación típica es \Archivos de programa\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\ y para plantillas de usuario (Mis plantillas), la ubicación típica es \Mis documentos\Visual Studio 14.0\Templates\ProjectTemplates\. Las jerarquías de carpetas de estas dos ubicaciones se combinan para crear el árbol tipos de proyecto.

Para Visual Studio con la configuración del desarrollador de C#, el árbol Tipos de proyecto tiene un aspecto similar al siguiente:

Screenshot of the Project types folder tree in Visual Studio with C# developer settings.

La carpeta ProjectTemplates correspondiente tiene este aspecto:

Screenshot of the Project Templates folder tree in Visual Studio with C# developer settings.

Cuando se abre el cuadro de diálogo Nuevo proyecto , Visual Studio recorre la carpeta ProjectTemplates y vuelve a crear su estructura en el árbol Tipos de proyecto con algunos cambios:

  • El nodo raíz del árbol tipos de proyecto viene determinado por la plantilla de aplicación.

  • El nombre del nodo se puede localizar y puede contener caracteres especiales.

  • Se puede cambiar el criterio de ordenación.

Búsqueda del nodo raíz de un tipo de proyecto

Cuando Visual Studio atraviesa las carpetas ProjectTemplates, abre todos los archivos .zip y extrae los archivos .vstemplate. Un archivo .vstemplate usa XML para describir una plantilla de aplicación. Para obtener más información, vea Nueva generación de proyectos: En segundo plano, parte dos.

La <etiqueta ProjectType> determina el tipo de proyecto para la aplicación. Por ejemplo, el archivo \CSharp\SmartDevice\WindowsCE\1033\WindowsCE-EmptyProject.zip contiene un archivo EmptyProject.vstemplate que tiene esta etiqueta:

<ProjectType>CSharp</ProjectType>

La <etiqueta ProjectType> , y no la subcarpeta de la carpeta ProjectTemplates, determina el nodo raíz de una aplicación en el árbol Tipos de proyecto. En el ejemplo, las aplicaciones de Windows CE aparecerían en el nodo raíz de Visual C# e incluso si tuviera que mover la carpeta WindowsCE a la carpeta VisualBasic, las aplicaciones de Windows CE seguirían apareciendo en el nodo raíz de Visual C# .

Localizar el nombre del nodo

Cuando Visual Studio atraviesa las carpetas ProjectTemplates, examina los archivos .vstdir que encuentre. Un archivo .vstdir es un archivo XML que controla la apariencia del tipo de proyecto en el cuadro de diálogo Nuevo proyecto . En el archivo .vstdir, use la <etiqueta LocalizedName> para asignar un nombre al nodo Tipos de proyecto.

Por ejemplo, el archivo \CSharp\Database\TemplateIndex.vstdir contiene esta etiqueta:

<LocalizedName Package="{462b036f-7349-4835-9e21-bec60e989b9c}" ID="4598"/>

Esto determina el archivo DLL satélite y el identificador de recurso de la cadena localizada que denomina el nodo raíz, en este caso, Base de datos. El nombre localizado puede contener caracteres especiales que no están disponibles para los nombres de carpeta, como .NET.

Si no hay ninguna <etiqueta LocalizedName>, el tipo de proyecto se denomina mediante la propia carpeta Smart Teléfono 2003.

Buscar el criterio de ordenación de un tipo de proyecto

Para determinar el criterio de ordenación del tipo de proyecto, los archivos .vstdir usan la <etiqueta SortOrder> .

Por ejemplo, el archivo \CSharp\Windows\Windows.vstdir contiene esta etiqueta:

<SortOrder>5</SortOrder>

El archivo \CSharp\Database\TemplateIndex.vstdir tiene una etiqueta con un valor mayor:

<SortOrder>5000</SortOrder>

Cuanto menor sea el número de la <etiqueta SortOrder>, mayor será la posición del árbol, por lo que el nodo de Windows aparece más alto que el nodo Base de datos en el árbol Tipos de proyecto.

Si no se especifica ninguna <etiqueta SortOrder> para un tipo de proyecto, aparece en orden alfabético después de cualquier tipo de proyecto que contenga <especificaciones SortOrder> .

Tenga en cuenta que no hay archivos .vstdir en las carpetas Mis documentos (Mis plantillas). Los nombres de tipo de proyecto de aplicación de usuario no se localizan y aparecen en orden alfabético.

Una revisión rápida

Vamos a modificar el cuadro de diálogo Nuevo proyecto y crear una nueva plantilla de proyecto de usuario.

  1. Agregue una subcarpeta MyProjectNode a la carpeta \Archivos de programa\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\CSharp.

  2. Cree un archivo MyProject.vstdir en la carpeta MyProjectNode mediante cualquier editor de texto.

  3. Agregue estas líneas al archivo .vstdir:

    <TemplateDir Version="1.0.0">
        <SortOrder>6</SortOrder>
    </TemplateDir>
    
  4. Guarde y cierre el archivo .vstdir.

  5. Cree un archivo MyProject.vstemplate en la carpeta MyProjectNode mediante cualquier editor de texto.

  6. Agregue estas líneas al archivo .vstemplate:

    <VSTemplate Version="2.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
        <TemplateData>
            <ProjectType>CSharp</ProjectType>
        </TemplateData>
    </VSTemplate>
    
  7. Guarde el archivo.vstemplate y cierre el editor.

  8. Envíe el archivo .vstemplate a una nueva carpeta MyProjectNode\MyProject.zip comprimida.

  9. En la ventana de comandos de Visual Studio, escriba:

    devenv /installvstemplates
    

    Abra Visual Studio.

  10. Abra el cuadro de diálogo Nuevo proyecto y expanda el nodo del proyecto de Visual C# .

    Screenshot of the Project types folder tree in the New Project dialog box with MyProjectNode highlighted under the expanded Visual C# project node.

    MyProjectNode aparece como un nodo secundario de Visual C# justo debajo del nodo de Windows.