Nouvelle build de projet : Sous le capot, une partie
A jamais de réflexion à la création de votre propre type de projet ? Demandez-vous ce qui se produit lorsque vous créez un projet ? Prenons un coup d'œil sous le capot et voyons ce qui se passe en réalité sur.
Il existe plusieurs tâches des coordonnées du que Visual Studio pour vous :
Il affiche une arborescence de tous les types de projets disponibles.
Elle affiche une liste de modèles d'application pour chaque type de projet et vous permet de choisir un.
Il collecte des informations de projet pour l'application, telles que le nom du projet et le chemin d'accès.
Il transmet ces informations à la fabrique de projet.
Il génère des éléments de projet et des dossiers dans la solution actuelle.
La boîte de dialogue nouveau projet
Elle toute démarre lorsque vous sélectionnez un type de projet pour un nouveau projet. Démarrons en cliquant sur Nouveau projet dans le menu de Fichier . La boîte de dialogue de Nouveau projet apparaît, en regardant à ceci :
Jetons une présentation détaillée. l'arborescence de Types de projets répertorie les différents types de projet que vous pouvez créer. Lorsque vous sélectionnez un type de projet comme Windows Visual c#, vous verrez une liste de modèles d'applications pour vous aider à démarrer. Modèles Visual Studio installés sont installés par Visual Studio et sont disponibles à tout utilisateur de votre ordinateur. De nouveaux modèles que vous créez ou que vous collectez peuvent être ajoutés à Mes modèles et sont uniquement disponibles pour vous.
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 pour créer une application avec une interface utilisateur Windows.
En bas de la boîte de dialogue de Nouveau projet , vous verrez plusieurs contrôles qui recueillent plus d'informations. Les contrôles que vous voyez dépendre du type de projet, mais en général ils incluent une zone de texte de Nom de projet, une zone de texte d' Emplacement et un bouton relatif de Parcourir , et une case à cocher de zone de texte de Nom de solution et relative de Créer le répertoire pour la solution .
Remplir boîte de dialogue nouveau projet
À partir duquel est-ce-que la boîte de dialogue de Nouveau projet obtient ses informations ? Il existe deux mécanismes au travail ici, l'un d'eux déconseillés. La boîte de dialogue de Nouveau projet combine et affiche les informations obtenues à partir de deux mécanismes.
La méthode (déconseillée) plus ancienne utilise des entrées de base de registres et les fichiers de .vsdir. Ce mécanisme fonctionne lorsque Visual Studio est ouvert. La méthode plus récente utilise des fichiers .vstemplate. Ce mécanisme fonctionne lorsque Visual Studio est initialisé, par exemple, lors de l'exécution
devenv /setup
ou
devenv /installvstemplates
Types de projet
La position et les noms des nœuds racine de Types de projets , tels que Visual C# et Autres langages, est déterminée par les entrées de base de registres. 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 correspondants .vstemplate. Prenons d'abord les nœuds racine.
Nœuds racine de type de projet
Lorsque Visual Studio est initialisé, il parcourt les sous-clés de la clé HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\VisualStudio\10.0\NewProjectTemplates\TemplateDirs de base de registres pour générer et nommer les nœuds racine de l'arborescence de Types de projets . Ces informations sont mises en cache pour une utilisation ultérieure. Examinez} de TemplateDirs \{FAE04EC1-301F-11D3-BF4B-00C04F79EFBC \ /1 clé. Chaque entrée est un VSPackage GUID. Le nom de la sous-clé (/1) ignoré, mais sa présence indique qu'il s'agit d'un nœud racine de Types de projets . Un nœud racine peut après avoir plusieurs sous-clés qui contrôlent son apparence dans l'arborescence de Types de projets . Prenons certains d'entre eux.
(Valeur par défaut)
Il s'agit de l'ID de ressource de la chaîne localisée qui nomme le nœud racine. La ressource de type chaîne se trouve dans la DLL satellite sélectionné par le VSPackage GUID.
Dans l'exemple, le VSPackage GUID est
FAE04EC1-301F-11D3-BF4B-00C04F79EFBC {}
et l'ID de ressource (par défaut) du nœud racine (/1) est #2345
Si vous recherche utilisée par un GUID dans les packages voisins clé et vérifiez la sous-clé de SatelliteDll, vous pouvez rechercher le chemin d'accès de l'assembly qui contient la ressource de type chaîne :
<Visual Studio installation path>\VC#\VCSPackages \ 1033 \ csprojui.dll
Pour ce faire, ouvrez l'Explorateur de fichiers et le glisser-déplacer csprojui.dll dans le répertoire de Visual Studio. La table de chaînes montre que la ressource #2345 a la légende Visual C#.
SortPriority
Cette valeur détermine la position du nœud racine dans l'arborescence de Types de projets .
SortPriority REG_DWORD 0x00000014 (20)
Plus le numéro de la priorité est inférieure, plus la position dans l'arborescence élevée.
DeveloperActivity
Si cette valeur est présente, la position du nœud racine est contrôlée par la boîte de dialogue paramètres du développeur. Par exemple :
DeveloperActivity REG_SZ VC#
indique que Visual c# est un nœud racine si Visual Studio est configuré pour le développement de Visual C++ . Sinon, il s'agira d'un nœud enfant d' Autres langages.
Dossier
Si cette valeur est présente, le nœud racine est un nœud enfant du dossier spécifié. Une liste de dossiers possibles s'affiche sous la clé
HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\VisualStudio\10.0\NewProjectTemplates\PseudoFolders
Par exemple, l'entrée de projets de base de données a une clé de dossier correspondant aux autres types de projet d'entrée dans PseudoFolders. Par conséquent, dans l'arborescence de Types de projets , projets de base de données est un nœud enfant d' Autres types de projets.
Nœuds enfants de type de projet et fichiers de .vstdir
La position des nœuds enfants dans l'arborescence de Types de projets suit la hiérarchie des dossiers dans les dossiers ProjectTemplates. Pour les modèles d'ordinateur (Modèles Visual Studio installés), l'emplacement standard est \Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplates \ et pour les modèles utilisateur (Mes modèles), l'emplacement standard est \My Documents\Visual Studio 10\Templates\ProjectTemplates \. Les arborescences des dossiers de ces deux derniers sont fusionnées pour créer l'arborescence de Types de projets .
Pour Visual Studio avec les paramètres du développeur de Visual C++ , l'arborescence de Types de projets ressemble à ceci :
Le dossier correspondant ProjectTemplates ressemble à ceci :
Lorsque la boîte de dialogue de Nouveau projet s'ouvre, Visual Studio parcourt le dossier ProjectTemplates et recrée sa structure dans l'arborescence de Types de projets avec certaines modifications :
Le nœud racine dans l'arborescence de Types de projets est déterminé par le modèle d'application.
Le nom du nœud peut être localisé et peut contenir des caractères spéciaux.
l'ordre de tri peut être modifié.
Rechercher le nœud racine pour un type de projet
Lorsque Visual Studio parcourt les dossiers ProjectTemplates, il ouvre tous les fichiers .zip et récupère tous les fichiers .vstemplate. Un fichier .vstemplate utilise XML pour décrire un modèle d'application. Pour plus d'informations, consultez Nouvelle build de projet : sous le capot, partie deux.
La balise de <projecttype> détermine le type de projet pour l'application. Par exemple, le fichier de \CSharp\SmartDevice\WindowsCE\1033\WindowsCE-EmptyProject.zip file contains an EmptyProject .vstemplate qui possède cette balise :
<ProjectType>CSharp</ProjectType>
La balise de <projecttype>, et non le sous-dossier dans le dossier ProjectTemplates, détermine le nœud racine d'une application dans l'arborescence des types de projets. Dans l'exemple, les applications Windows CE apparaissent sous le nœud racine de Visual C# , et même si vous devez déplacer le dossier de WindowsCE au dossier Visual Basic, les applications Windows CE apparaissaient toujours sous le nœud racine de Visual C# .
Localiser le nom du nœud
Lorsque Visual Studio parcourt les dossiers ProjectTemplates, il examine tous les fichiers de .vstdir qu'il trouve. Un fichier de .vstdir est un fichier XML qui contrôle l'apparence du projet dans la boîte de dialogue de Nouveau projet . Dans le fichier de .vstdir, utilisez l'indicateur de <localizedname> pour nommer le nœud types de projet.
Par exemple, le fichier de \CSharp\Database\TemplateIndex .vstdir contient cette balise :
<LocalizedName Package="{462b036f-7349-4835-9e21-bec60e989b9c}" ID="4598"/>
Cela détermine la DLL satellite et l'ID de ressource de la chaîne localisée qui nomme le nœud racine, dans ce cas, Base de données. Le nom localisé peut contenir des caractères spéciaux qui sont pas disponibles pour les noms de dossier, tels que .NET.
Si aucune balise de <localizedname> n'est présente, le type de projet est nommé par le dossier lui-même, SmartPhone2003.
Rechercher l'ordre de tri pour un type de projet
Pour déterminer l'ordre de tri du type de projet, les fichiers de .vstdir utilisent la balise de <sortorder>.
Par exemple, le fichier de \CSharp\Windows\Windows .vstdir contient cette balise :
<SortOrder>5</SortOrder>
Le fichier de \CSharp\Database\TemplateIndex .vstdir a une balise avec une plus grande valeur :
<SortOrder>5000</SortOrder>
Plus le nombre dans la balise de <sortorder> est inférieur, plus la position dans l'arborescence est élevée, donc le nœud windows est plus élevé que le nœud de base de données dans l'arborescence des types de projets.
Si aucune balise de <sortorder> n'est spécifiée pour un type de projet, elle apparaît dans l'ordre alphabétique après tout type de projet qui contiennent des caractéristiques de <sortorder>.
Notez qu'il n'existe aucun fichier de .vstdir dans le dossier mes documents (Mes modèles). Les noms des types de projet d'application utilisateur ne sont pas localisés et ne s'affichent pas dans l'ordre alphabétique.
Un coup d'œil rapide
Modifions la boîte de dialogue de Nouveau projet et créons un nouveau modèle de projet pour l'utilisateur.
Ajoutez un sous-dossier de MyProjectNode dans le dossier de \Program Files\Microsoft Visual Studio 10\Common7\IDE\ProjectTemplates\CSharp.
Créez un fichier de MyProject.vstdir dans le dossier de MyProjectNode à l'aide d'un éditeur de texte.
Ajoutez les lignes suivantes au fichier de .vstdir :
<TemplateDir Version="1.0.0"> <SortOrder>6</SortOrder> </TemplateDir>
Enregistrez et fermez le fichier de .vstdir.
Créez un fichier de MyProject.vstemplate dans le dossier de MyProjectNode à l'aide d'un éditeur de texte.
Ajoutez les lignes suivantes au fichier .vstemplate :
<VSTemplate Version="2.0.0" Type="Project" xmlns="https://schemas.microsoft.com/developer/vstemplate/2005"> <TemplateData> <ProjectType>CSharp</ProjectType> </TemplateData> </VSTemplate>
Enregistrez le fichier de the.vstemplate et fermez l'éditeur.
Envoyez le fichier .vstemplate vers un nouveau dossier compressé de MyProjectNode \MyProject .zip.
Dans la fenêtre commande de Visual Studio, tapez :
devenv /installvstemplates
Ouvrez Visual Studio.
- Ouvrez la boîte de dialogue de Nouveau projet et développez le nœud du projet de Visual C# .
MyProjectNode apparaît comme un nœud enfant Visual c# juste sous le nœud windows.