Nouvelle génération de projet : Dans les coulisses, première partieNew Project Generation: Under the Hood, Part One

Jamais vu comment créer votre propre type de projet ?Ever thought about how to create your own project type? Demandez que se passe-t-il réellement lorsque vous créez un nouveau projet ?Wonder what actually happens when you create a new project? Nous allons jeter un coup sous le capot et voir ce qui se passe vraiment.Let's take a peek under the hood and see what's really going on.

Il existe plusieurs tâches que les coordonnées de Visual Studio pour vous :There are several tasks that Visual Studio coordinates for you:

  • Il affiche une arborescence de tous les types de projet disponibles.It displays a tree of all available project types.

  • Il affiche la liste des modèles d’application pour chaque type de projet et vous permet de choisir un.It displays a list of application templates for each project type and lets you pick one.

  • Il collecte des informations de projet pour l’application, telles que le nom du projet et le chemin d’accès.It collects project information for the application, such as project name and path.

  • Il transmet ces informations à la fabrique de projets.It passes this information on to the project factory.

  • Il génère des éléments de projet et des dossiers dans la solution actuelle.It generates project items and folders in the current solution.

La boîte de dialogue Nouveau projetThe New Project Dialog Box

Tout commence lorsque vous sélectionnez un type de projet pour un nouveau projet.It all begins when you select a project type for a new project. Nous allons commencer en cliquant sur nouveau projet sur la fichier menu.Let's start by clicking New Project on the File menu. Le nouveau projet boîte de dialogue s’affiche, recherche quelque chose comme ceci :The New Project dialog box appears, looking something like this:

Boîte de dialogue Nouveau projetNew Project dialog box

Jetons un œil plus proche.Let's take a closer look. Le types de projet les différents types de projet, vous pouvez créer des listes d’arborescence.The Project types tree lists the various project types you can create. Lorsque vous sélectionnez un type de projet comme Windows Visual c#, vous voyez une liste des modèles d’application pour vous aider à démarrer.When you select a project type like Visual C# Windows, you'll see a list of application templates to get you started. Modèles Visual Studio installés sont installés par Visual Studio et sont disponibles pour tout utilisateur de votre ordinateur.Visual Studio installed templates are installed by Visual Studio and are available to any user of your computer. Nouveaux modèles que vous créez ou collectez peuvent être ajoutés à Mes modèles et sont disponibles uniquement pour vous.New templates that you create or collect can be added to My Templates and are available only to you.

Lorsque vous sélectionnez un modèle comme Application Windows, une description du type d’application s’affiche dans la boîte de dialogue, dans ce cas, un projet de création d’une application avec une interface utilisateur Windows.When you select a template like Windows Application, a description of the application type appears in the dialog box; in this case, A project for creating an application with a Windows user interface.

Au bas de la nouveau projet boîte de dialogue, vous verrez plusieurs contrôles qui collecter plus d’informations.At the bottom of the New Project dialog box, you'll see several controls that gather more information. Les contrôles que vous voyez varient selon le type de projet, mais elles comprennent en général d’un projet nom zone de texte, un emplacement zone de texte et connexes Parcourir bouton et un Nom de la solution zone de texte et connexes créer le répertoire pour la solution case à cocher.The controls you see depend on the project type, but generally they include a project Name text box, a Location text box and related Browse button, and a Solution Name text box and related Create directory for solution check box.

Remplissage de la boîte de dialogue Nouveau projetPopulating the New Project Dialog Box

Où est le nouveau projet boîte de dialogue obtenir ses informations à partir de ?Where does the New Project dialog box get its information from? Il existe deux mécanismes dans ce cas précis, un d’eux déconseillée.There are two mechanisms at work here, one of them deprecated. Le nouveau projet combine de boîte de dialogue et affiche les informations obtenues à partir de ces deux mécanismes.The New Project dialog box combines and displays the information obtained from both mechanisms.

L’ancienne méthode (déconseillée) utilise les entrées du Registre système et les fichiers .vsdir.The older (deprecated) method uses system registry entries and .vsdir files. Ce mécanisme s’exécute à l’ouverture de Visual Studio.This mechanism runs when Visual Studio opened. La méthode la plus récente utilise des fichiers .vstemplate.The newer method uses .vstemplate files. Ce mécanisme s’exécute lors de l’initialisation de Visual Studio, par exemple, en exécutantThis mechanism runs when Visual Studio is initialized, for example, by running

devenv /setup  

ouor

devenv /installvstemplates  

Types de projetProject Types

La position et les noms de la types de projet racine des nœuds, tels que Visual C# et autres langages, est déterminée par les entrées du Registre système.The position and names of the Project types root nodes, such as Visual C# and Other Languages, is determined by system registry entries. L’organisation des nœuds enfants, tels que base de données et Smart Device, reflète la hiérarchie des dossiers qui contiennent les fichiers .vstemplate correspondant.The organization of the child nodes, such as Database and Smart Device, mirrors the hierarchy of the folders that contain the corresponding .vstemplate files. Examinons les nœuds racines tout d’abord.Let's look at the root nodes first.

Nœuds de racines de Type de projetProject Type Root Nodes

Lorsque Visual StudioVisual Studio est initialisé, il parcourt les sous-clés de la clé de Registre système HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\NewProjectTemplates\TemplateDirs pour créer et nommer les nœuds racines de la detypesdeprojets arborescence.When Visual StudioVisual Studio is initialized, it traverses the subkeys of the system registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\NewProjectTemplates\TemplateDirs to build and name the root nodes of the Project types tree. Cette information est mis en cache pour une utilisation ultérieure.This information is cached for later use. Examinez le TemplateDirs\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC} \ /1 clé.Look at the TemplateDirs\{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC}\/1 key. Chaque entrée est un GUID VSPackage.Each entry is a VSPackage GUID. Le nom de la sous-clé (/ 1) est ignoré, mais sa présence indique qu’il s’agit d’un types de projet nœud racine.The name of the subkey (/1) is ignored, but its presence indicates that this is a Project types root node. Un nœud racine peut avoir à son tour plusieurs sous-clés qui contrôlent son apparence dans le types de projet arborescence.A root node may in turn have several subkeys that control its appearance in the Project types tree. Examinons certains d'entre eux.Let's look at some of them.

(Default)(Default)

Il s’agit de l’ID de ressource de la chaîne localisée que les noms du nœud racine.This is the resource ID of the localized string that names the root node. La ressource de chaîne se trouve dans la DLL sélectionné par le GUID VSPackage satellite.The string resource is located in the satellite DLL selected by the VSPackage GUID.

Dans l’exemple, le GUID de VSPackage estIn the example, the VSPackage GUID is

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

et l’ID de ressource (valeur par défaut) du nœud racine (/ 1) est #2345and the resource ID (default value) of the root node (/1) is #2345

Si vous recherchez le GUID dans la clé de Packages à proximité et examinez la sous-clé SatelliteDll, vous trouverez le chemin d’accès de l’assembly qui contient la ressource de chaîne :If you look up the GUID in the nearby Packages key and examine the SatelliteDll subkey, you can find the path of the assembly that contains the string resource:

<Le chemin d’accès de Visual Studio installation > \VC#\VCSPackages\1033\csprojui.dll<Visual Studio installation path>\VC#\VCSPackages\1033\csprojui.dll

Pour vérifier cela, ouvrez l’Explorateur de fichiers et faites glisser csprojui.dll dans le répertoire Visual Studio...To verify this, open the File Explorer and drag csprojui.dll into the Visual Studio directory.. La table de chaînes montre que la ressource #2345 a la légende Visual C#.The string table shows that resource #2345 has the caption Visual C#.

SortPrioritySortPriority

Ce paramètre détermine la position du nœud racine dans le types de projet arborescence.This determines the position of the root node in the Project types tree.

SortPriority REG_DWORD 0x00000014 (20)SortPriority REG_DWORD 0x00000014 (20)

Plus le nombre de priorité, plus la position dans l’arborescence.The lower the number of the priority, the higher the position in the tree.

DeveloperActivityDeveloperActivity

Si cette sous-clé est présente, la position du nœud racine est contrôlée par la boîte de dialogue Paramètres de développeur.If this subkey is present, then the position of the root node is controlled by the Developer Settings dialog box. Par exemple :For example,

DeveloperActivity REG_SZ VC #DeveloperActivity REG_SZ VC#

Indique que Visual c# est un nœud racine si Visual Studio est définie pour Visual C++Visual C++ développement.indicates that Visual C# will be a root node if Visual Studio is set for Visual C++Visual C++ development. Dans le cas contraire, il sera un nœud enfant de autres langages.Otherwise, it will be a child node of Other Languages.

DossierFolder

Si cette sous-clé est présente, le nœud racine devienne un nœud enfant du dossier spécifié.If this subkey is present, then the root node becomes a child node of the specified folder. Une liste de dossiers possibles s’affiche sous la cléA list of possible folders appears under the key

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

Par exemple, l’entrée de projets de base de données a une clé de dossier qui correspond à l’entrée d’autres Types de projets dans PseudoFolders.For example, the Database Projects entry has a Folder key that matches the Other Project Types entry in PseudoFolders. Ainsi, dans le types de projet arborescence, des projets de base de données sera un nœud enfant de autres Types de projets.So, in the Project types tree, Database Projects will be a child node of Other Project Types.

Type des nœuds enfants et les fichiers .vstdir de projetProject Type Child Nodes and .vstdir Files

La position des nœuds enfants dans le types de projet arborescence suit la hiérarchie des dossiers dans les dossiers ProjectTemplates.The position of the child nodes in the Project types tree follows the hierarchy of the folders in the ProjectTemplates folders. Pour les modèles d’ordinateur (modèles Visual Studio installés), l’emplacement par défaut est \Program Files\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\ et pour les modèles de l’utilisateur (Mes modèles), l’emplacement par défaut est documents\Visual Studio 14.0\Templates\ProjectTemplates\.For machine templates (Visual Studio installed templates), the typical location is \Program Files\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\ and for user templates (My templates), the typical location is \My Documents\Visual Studio 14.0\Templates\ProjectTemplates\. Les hiérarchies de dossier à partir de ces deux emplacements sont fusionnés pour créer le types de projet arborescence.The folder hierarchies from these two locations are merged to create the Project types tree.

Pour Visual Studio c# Paramètres du développeur, la types de projet arborescence ressemble à ceci :For Visual Studio with C# developer settings, the Project types tree looks something like this:

Types de projetsProject Types

Le dossier ProjectTemplates correspondant ressemble à ceci :The corresponding ProjectTemplates folder looks like this:

Modèles de projetProject Templates

Lorsque le nouveau projet boîte de dialogue s’ouvre, Visual StudioVisual Studio traverse le dossier ProjectTemplates et recrée la structure dans le types de projet arborescence avec des modifications :When the New Project dialog box opens, Visual StudioVisual Studio traverses the ProjectTemplates folder and recreates its structure in the Project types tree with some changes:

  • Le nœud racine de la types de projet arborescence est déterminée par le modèle d’application.The root node in the Project types tree is determined by the application template.

  • Le nom du nœud peut être localisé et peut contenir des caractères spéciaux.The node name can be localized and can contain special characters.

  • L’ordre de tri peut être modifié.The sort order can be changed.

Recherche le nœud racine pour un Type de projetFinding the Root Node for a Project Type

Quand Visual Studio traverse les dossiers ProjectTemplates, il ouvre tous les fichiers .zip et extrait les fichiers .vstemplate.When Visual Studio traverses the ProjectTemplates folders, it opens all .zip files and extracts any .vstemplate files. Un fichier .vstemplate utilise XML pour décrire un modèle d’application.A .vstemplate file uses XML to describe an application template. Pour plus d’informations, consultez nouvelle génération de projet : sous le capot, partie deux.For more information, see New Project Generation: Under the Hood, Part Two.

Le <ProjectType > balise détermine le type de projet pour l’application.The <ProjectType> tag determines the project type for the application. Par exemple, le fichier \CSharp\SmartDevice\WindowsCE\1033\WindowsCE-EmptyProject.zip contient un fichier de EmptyProject.vstemplate ayant cette balise :For example, the \CSharp\SmartDevice\WindowsCE\1033\WindowsCE-EmptyProject.zip file contains an EmptyProject.vstemplate file that has this tag:

<ProjectType>CSharp</ProjectType>  

Le <ProjectType > balise et pas le sous-dossier dans le dossier ProjectTemplates, détermine le nœud racine de l’application dans le types de projet arborescence.The <ProjectType> tag, and not the subfolder in the ProjectTemplates folder, determines an application's root node in the Project types tree. Dans l’exemple, les applications Windows CE apparaîtraient sous la Visual C# nœud racine, et même si vous deviez déplacer le dossier WindowsCE dans le dossier Visual Basic, les applications Windows CE seraient apparaissent toujours sous la Visual C# nœud racine.In the example, Windows CE applications would appear under the Visual C# root node, and even if you were to move the WindowsCE folder to the VisualBasic folder, Windows CE applications still would appear under the Visual C# root node.

Localisation du nom de nœudLocalizing the Node Name

Quand Visual Studio traverse les dossiers ProjectTemplates, il examine tous les fichiers .vstdir qu’il trouve.When Visual Studio traverses the ProjectTemplates folders, it examines any .vstdir files it finds. Un fichier .vstdir est un fichier XML qui contrôle l’apparence du type de projet dans le nouveau projet boîte de dialogue.A .vstdir file is an XML file that controls the appearance of the project type in the New Project dialog box. Dans le fichier .vstdir, utilisez le <LocalizedName > balise au nom de la types de projet nœud.In the .vstdir file, use the <LocalizedName> tag to name the Project types node.

Par exemple, le fichier \CSharp\Database\TemplateIndex.vstdir contient cette balise :For example, the \CSharp\Database\TemplateIndex.vstdir file contains this tag:

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

Ce paramètre détermine l’ID de ressources et les DLL satellite de la chaîne localisée qui dans ce cas, le nœud racine, les noms base de données.This determines the satellite DLL and resource ID of the localized string that names the root node, in this case, Database. Le nom localisé peut contenir des caractères spéciaux qui ne sont pas disponibles pour les noms de dossier, tel que .NET.The localized name can contain special characters that are not available for folder names, such as .NET.

Si aucun <LocalizedName > balise est présent, le type de projet est nommé par le dossier lui-même, SmartPhone2003.If no <LocalizedName> tag is present, the project type is named by the folder itself, SmartPhone2003.

Recherche de l’ordre de tri pour un Type de projetFinding the Sort Order for a Project Type

Pour déterminer l’ordre de tri du type de projet, utilisent les fichiers .vstdir le <SortOrder > balise.To determine the sort order of the project type, .vstdir files use the <SortOrder> tag.

Par exemple, le fichier \CSharp\Windows\Windows.vstdir contient cette balise :For example, the \CSharp\Windows\Windows.vstdir file contains this tag:

<SortOrder>5</SortOrder>  

Le fichier \CSharp\Database\TemplateIndex.vstdir a une balise avec une valeur supérieure :The \CSharp\Database\TemplateIndex.vstdir file has a tag with a larger value:

<SortOrder>5000</SortOrder>  

Plus le nombre dans le <SortOrder > balise, plus la position dans l’arborescence, afin que la Windows nœud apparaît supérieure à la base de données nœud dans le types de projets arborescence.The lower the number in the <SortOrder> tag, the higher the position in the tree, so the Windows node appears higher than the Database node in the Project types tree.

Si aucun <SortOrder > balise est spécifiée pour un type de projet, il apparaît dans l’ordre alphabétique en suivant les types de projets qui contiennent des <SortOrder > spécifications.If no <SortOrder> tag is specified for a project type, it appears in alphabetical order following any project types that contain <SortOrder> specifications.

Notez qu’il n’y a aucun fichier .vstdir dans Mes Documents (Mes modèles) dossiers.Note that there are no .vstdir files in the My Documents (My Templates) folders. Les noms de type de projet application utilisateur ne sont pas localisés et s’affichent dans l’ordre alphabétique.User application project type names are not localized and appear in alphabetical order.

Une révision rapideA Quick Review

Nous allons modifier le nouveau projet boîte de dialogue zone et créer un modèle de projet utilisateur.Let's modify the New Project dialog box and create a new user project template.

  1. Ajouter un sous-dossier MyProjectNode vers le dossier \Program Files\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\CSharp.Add a MyProjectNode subfolder to the \Program Files\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\CSharp folder.

  2. Créer un fichier MyProject.vstdir dans le dossier MyProjectNode à l’aide de n’importe quel éditeur de texte.Create a MyProject.vstdir file in the MyProjectNode folder using any text editor.

  3. Ajoutez ces lignes au fichier .vstdir :Add these lines to the .vstdir file:

    <TemplateDir Version="1.0.0">  
        <SortOrder>6</SortOrder>  
    </TemplateDir>  
    
  4. Enregistrez et fermez le fichier .vstdir.Save and close the .vstdir file.

  5. Créer un fichier MyProject.vstemplate dans le dossier MyProjectNode à l’aide de n’importe quel éditeur de texte.Create a MyProject.vstemplate file in the MyProjectNode folder using any text editor.

  6. Ajoutez ces lignes au fichier .vstemplate :Add these lines to the .vstemplate file:

    <VSTemplate Version="2.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">  
        <TemplateData>  
            <ProjectType>CSharp</ProjectType>  
        </TemplateData>  
    </VSTemplate>  
    
  7. Enregistrez le fichier de the.vstemplate et fermez l’éditeur.Save the.vstemplate file and close the editor.

  8. Envoyer le fichier .vstemplate dans un nouveau dossier MyProjectNode\MyProject.zip compressé.Send the .vstemplate file to a new compressed MyProjectNode\MyProject.zip folder.

  9. À partir de la fenêtre de commande Visual Studio, tapez :From the Visual Studio command window, type:

    devenv /installvstemplates  
    

    Ouvrez Visual Studio.Open Visual Studio.

  10. Ouvrez le nouveau projet boîte de dialogue zone, puis développez le Visual C# le nœud de projet.Open the New Project dialog box and expand the Visual C# project node.

    MyProjectNodeMyProjectNode

    MyProjectNode apparaît sous la forme d’un nœud enfant de Visual C# juste sous le nœud de Windows.MyProjectNode appears as a child node of Visual C# just under the Windows node.

Voir aussiSee Also

Génération de nouveau projet : les rouages du système, partie 2New Project Generation: Under the Hood, Part Two