Création d’un système de projet de base, partie 1Creating a Basic Project System, Part 1

Dans Visual Studio, les projets sont les conteneurs que les développeurs utilisent pour organiser les fichiers de code source et d’autres composants.In Visual Studio, projects are the containers that developers use to organize source code files and other assets. Les projets apparaissent en tant qu’enfants de solutions dans le l’Explorateur de solutions.Projects appear as children of solutions in the Solution Explorer. Les projets vous permettent d’organiser, générer, déboguer, déployer le code source et créer des références aux services Web, bases de données et d’autres ressources.Projects let you organize, build, debug, and deploy source code and create references to Web services, databases, and other resources.

Les projets sont définis dans les fichiers de projet, par exemple un fichier .csproj pour un projet Visual c#.Projects are defined in project files, for example a .csproj file for a Visual C# project. Vous pouvez créer votre propre type de projet qui a votre propre extension de nom de fichier de projet.You can create your own project type that has your own project file name extension. Pour plus d’informations sur les types de projets, consultez des Types de projet.For more information about project types, see Project Types.

Note

Si vous avez besoin étendre Visual Studio avec un type de projet personnalisé, nous recommandons de tirer parti du système de projet Visual Studio (vsp) qui a un nombre d’avantages par rapport à la création d’un système de projet à partir de zéro :If you need to extend Visual Studio with a custom project type, we strongly recommend leveraging the Visual Studio Project System (VSPS) which has a number of advantages over building a project system from scratch:

  • Service d’intégration plus facile.Easier onboarding. Même un système de projet de base nécessite des dizaines de milliers de lignes de code.Even a basic project system requires tens of thousands of lines of code. Tirant parti de VSP permet de réduire le coût de l’intégration à quelques clics avant que vous êtes prêt à personnaliser selon vos besoins.Leveraging VSPS reduces the onboarding cost to a few clicks before you are ready to customize it to your needs.
  • Facilite la maintenance.Easier maintenance. En tirant parti vsp, il vous suffit de mettre à jour vos propres scénarios.By leveraging VSPS, you only need to maintain your own scenarios. Nous nous occupons l’entretien de l’infrastructure de système de projet.We handle the upkeep of all of the project system infrastructure.

    Si vous avez besoin pour cibler des versions de Visual Studio antérieures à Visual Studio 2013, vous ne serez pas en mesure de tirer parti de vsp dans une extension Visual Studio.If you need to target versions of Visual Studio older than Visual Studio 2013, you will not be able to leverage VSPS in a Visual Studio extension. Si tel est le cas, cette procédure pas à pas est un bon emplacement pour commencer.If that is the case, this walkthrough is a good place to get started.

Cette procédure pas à pas montre comment créer un type de projet qui a le .myproj d’extension de nom de fichier projet.This walkthrough shows you how to create a project type that has the project file name extension .myproj. Cette procédure pas à pas emprunte du système de projet Visual c# existant.This walkthrough borrows from the existing Visual C# project system.

Note

Pour plus d’exemples de projets d’extension, consultez exemples d’extensibilité Visual Studio.For more examples of extension projects, see VSSDK Samples.

Cette procédure pas à pas explique comment accomplir ces tâches :This walkthrough teaches how to accomplish these tasks:

  • Créer un type de projet de base.Create a basic project type.

  • Créer un modèle de projet de base.Create a basic project template.

  • Enregistrer le modèle de projet avec Visual Studio.Register the project template with Visual Studio.

  • Créez une instance de project en ouvrant le nouveau projet boîte de dialogue et ensuite à l’aide de votre modèle.Create a project instance by opening the New Project dialog box and then using your template.

  • Créer une fabrique de projet pour votre système de projet.Create a project factory for your project system.

  • Créer un nœud de projet pour votre système de projet.Create a project node for your project system.

  • Ajouter des icônes personnalisées pour le système de projet.Add custom icons for the project system.

  • Implémenter la substitution de paramètre de modèle de base.Implement basic template parameter substitution.

PrérequisPrerequisites

À partir de Visual Studio 2015, vous n’installez pas le Kit de développement logiciel Visual Studio à partir du centre de téléchargement.Starting in Visual Studio 2015, you do not install the Visual Studio SDK from the download center. Il est inclus comme une fonctionnalité facultative dans le programme d’installation de Visual Studio.It is included as an optional feature in Visual Studio setup. Vous pouvez également installer le kit SDK VS ultérieurement.You can also install the VS SDK later on. Pour plus d’informations, consultez l’installation de Visual Studio SDK.For more information, see Installing the Visual Studio SDK.

Vous devez également télécharger le code source pour le Managed Package Framework pour les projets.You must also download the source code for the Managed Package Framework for Projects. Extrayez le fichier vers un emplacement qui est accessible à la solution que vous vous apprêtez à créer.Extract the file to a location that is accessible to the solution you are going to create.

Création d’un Type de projet de baseCreating a Basic Project Type

Créez un projet VSIX c# nommé SimpleProject.Create a C# VSIX project named SimpleProject. (Fichier, nouveau, projet , puis Visual c#, d’extensibilité, de projet VSIX).(File, New, Project and then Visual C#, Extensibility, VSIX Project). Ajouter un modèle d’élément de projet Visual Studio Package (dans l’Explorateur de solutions, cliquez sur le nœud du projet et sélectionnez Ajouter / nouvel élément, puis accédez à extensibilité / Package Visual Studio).Add a Visual Studio Package project item template (on the Solution Explorer, right-click the project node and select Add / New Item, then go to Extensibility / Visual Studio Package). Nommez le fichier SimpleProjectPackage.Name the file SimpleProjectPackage.

Création d’un modèle de projet de baseCreating a Basic Project Template

Maintenant, vous pouvez modifier ce VSPackage de base pour implémenter le nouveau type de projet .myproj.Now, you can modify this basic VSPackage to implement the new .myproj project type. Pour créer un projet basé sur le type de projet .myproj, Visual Studio doit connaître les fichiers, les ressources et les références à ajouter au nouveau projet.To create a project that is based on the .myproj project type, Visual Studio has to know which files, resources, and references to add to the new project. Pour fournir ces informations, placez les fichiers de projet dans un dossier de modèle de projet.To provide this information, put project files in a project template folder. Lorsqu’un utilisateur utilise le projet .myproj pour créer un projet, les fichiers sont copiés vers le nouveau projet.When a user uses the .myproj project to create a project, the files are copied to the new project.

Pour créer un modèle de projet de baseTo create a basic project template

  1. Ajoutez trois dossiers au projet, un sous l’autre : Templates\Projects\SimpleProject.Add three folders to the project, one under the other: Templates\Projects\SimpleProject. (Dans l’Explorateur de solutions, avec le bouton droit le SimpleProject nœud de projet, pointez sur ajouter, puis cliquez sur nouveau dossier.(In Solution Explorer, right-click the SimpleProject project node, point to Add, and then click New Folder. Nommez le dossier Templates.Name the folder Templates. Dans le modèles dossier, ajoutez un dossier nommé Projects.In the Templates folder, add a folder named Projects. Dans le projets dossier, ajoutez un dossier nommé SimpleProject.)In the Projects folder, add a folder named SimpleProject.)

  2. Dans le Templates\Projects\SimpleProject dossier, ajoutez un fichier Image Bitmap à utiliser comme icône nommé SimpleProject.ico.In the Templates\Projects\SimpleProject folder, add a Bitmap Image file to use as the icon named SimpleProject.ico. Lorsque vous cliquez sur ajouter, l’éditeur d’icône s’ouvre.When you click Add, the icon editor opens.

  3. Vérifiez l’icône unique.Make the icon distinctive. Cette icône s’affiche dans le nouveau projet boîte de dialogue plus loin dans la procédure pas à pas.This icon will appear in the New Project dialog box later in the walkthrough.

    Icône de projet simpleSimple Project Icon

  4. L’icône Enregistrer et fermer l’éditeur d’icône.Save the icon and close the icon editor.

  5. Dans le Templates\Projects\SimpleProject dossier, ajoutez un classe élément nommé Program.cs.In the Templates\Projects\SimpleProject folder, add a Class item named Program.cs.

  6. Remplacez le code existant par les lignes suivantes.Replace the existing code with the following lines.

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace $nameSpace$
    {  
        public class $className$
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello VSX!!!");
                Console.ReadKey();
            }
        }
    }
    

    Important

    Il ne s’agit pas de la forme finale de code Program.cs ; les paramètres de remplacement seront traités dans une étape ultérieure.This is not the final form of the Program.cs code; the replacement parameters will be dealt with in a later step. Vous constaterez des erreurs de compilation, mais aussi longtemps que du fichier Buiidaction est contenu, vous devez être en mesure de générer et exécuter le projet comme d’habitude.You may see compile errors, but as long as the file's BuildAction is Content, you should be able to build and run the project as usual.

  7. Enregistrez le fichier.Save the file.

  8. Copiez le fichier AssemblyInfo.cs à partir de la propriétés dossier pour le Projects\SimpleProject dossier.Copy the AssemblyInfo.cs file from the Properties folder to the Projects\SimpleProject folder.

  9. Dans le Projects\SimpleProject dossier ajouter un fichier XML nommé SimpleProject.myproj.In the Projects\SimpleProject folder add an XML file named SimpleProject.myproj.

    Note

    L’extension de nom de fichier pour tous les projets de ce type est .myproj.The file name extension for all projects of this type is .myproj. Si vous souhaitez le modifier, vous devez le modifier partout où qu'il est mentionné dans la procédure pas à pas.If you want to change it, you must change it everywhere it is mentioned in the walkthrough.

  10. Remplacez le contenu existant par les lignes suivantes.Replace the existing content with the following lines.

    <?xml version="1.0" encoding="utf-8" ?>  
    <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
      <PropertyGroup>  
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>  
        <SchemaVersion>2.0</SchemaVersion>  
        <ProjectGuid></ProjectGuid>  
        <OutputType>Exe</OutputType>  
        <RootNamespace>MyRootNamespace</RootNamespace>  
        <AssemblyName>MyAssemblyName</AssemblyName>  
        <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging>  
      </PropertyGroup>  
      <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">  
        <DebugSymbols>true</DebugSymbols>  
        <OutputPath>bin\Debug\</OutputPath>  
      </PropertyGroup>  
      <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">  
        <DebugSymbols>false</DebugSymbols>  
        <OutputPath>bin\Release\</OutputPath>  
      </PropertyGroup>  
      <ItemGroup>  
        <Reference Include="mscorlib" />  
        <Reference Include="System" />  
        <Reference Include="System.Data" />  
        <Reference Include="System.Xml" />  
      </ItemGroup>  
      <ItemGroup>  
        <Compile Include="AssemblyInfo.cs">  
          <SubType>Code</SubType>  
        </Compile>  
        <Compile Include="Program.cs">  
          <SubType>Code</SubType>  
        </Compile>  
      </ItemGroup>  
      <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />  
    </Project>  
    
  11. Enregistrez le fichier.Save the file.

  12. Dans le propriétés , configurez la Action de génération de AssemblyInfo.cs, Program.cs, SimpleProject.ico et SimpleProject.myproj à contenuet définir leurs Inclure dans VSIX propriétés True.In the Properties window, set the Build Action of AssemblyInfo.cs, Program.cs, SimpleProject.ico, and SimpleProject.myproj to Content, and set their Include in VSIX properties to True.

    Ce modèle de projet décrit un projet Visual c# base qui a une configuration Debug et une configuration Release.This project template describes a basic Visual C# project that has both a Debug configuration and a Release configuration. Le projet comprend deux fichiers sources, AssemblyInfo.cs et Program.cs et assembly plusieurs références.The project includes two source files, AssemblyInfo.cs and Program.cs, and several assembly references. Lorsqu’un projet est créé à partir du modèle, la valeur ProjectGuid est automatiquement remplacée par un nouveau GUID.When a project is created from the template, the ProjectGuid value is automatically replaced by a new GUID.

    Dans l’Explorateur de solutions, développé modèles dossier doit apparaître comme suit :In Solution Explorer, the expanded Templates folder should appear as follows:

Templates  
   Projects  
      SimpleProject  
         AssemblyInfo.cs  
         Program.cs  
         SimpleProject.ico  
         SimpleProject.myproj  

Création d’une fabrique de projet de baseCreating a Basic Project Factory

Vous devez indiquer à l’emplacement de votre dossier de modèles de projet Visual Studio.You must tell Visual Studio the location of your project template folder. Pour ce faire, ajoutez un attribut à la classe VSPackage qui implémente la fabrique de projet afin que l’emplacement du modèle est écrites dans le Registre système lorsque le VSPackage est généré.To do this, add an attribute to the VSPackage class that implements the project factory so that the template location is written to the system registry when the VSPackage is built. Commencez par créer une fabrique de projet de base qui est identifiée par un GUID de fabrique de projet.Start by creating a basic project factory that is identified by a project factory GUID. Utilisez le ProvideProjectFactoryAttribute attribut pour se connecter de la fabrique de projet à la classe SimpleProjectPackage.Use the ProvideProjectFactoryAttribute attribute to connect the project factory to the SimpleProjectPackage class.

Pour créer une fabrique de projet de baseTo create a basic project factory

  1. Créer un GUID de votre fabrique de projet (sur le outils menu, cliquez sur Create GUID), ou utiliser l’une dans l’exemple suivant.Create GUIDs for your project factory (on the Tools menu, click Create GUID), or use the one in the following example. Ajouter les GUID à la classe SimpleProjectPackage près de la section avec déjà défini PackageGuidString.Add the GUIDs to the SimpleProjectPackage class near the section with the already defined PackageGuidString. Les GUID doivent être sous forme GUID et sous forme de chaîne.The GUIDs must be in both GUID form and string form. Le code résultant doit ressembler à l’exemple suivant.The resulting code should resemble the following example.

        public sealed class SimpleProjectPackage : Package
        {  
            ...
            public const string SimpleProjectPkgString = "96bf4c26-d94e-43bf-a56a-f8500b52bfad";  
            public const string SimpleProjectFactoryString = "471EC4BB-E47E-4229-A789-D1F5F83B52D4";  
    
            public static readonly Guid guidSimpleProjectFactory = new Guid(SimpleProjectFactoryString);  
        }  
    
  2. Ajoutez une classe au début SimpleProject dossier nommé SimpleProjectFactory.cs.Add a class to the top SimpleProject folder named SimpleProjectFactory.cs.

  3. Ajoutez le code suivant à l’aide des instructions :Add the following using statements:

    using System.Runtime.InteropServices;  
    using Microsoft.VisualStudio.Shell;  
    
  4. Ajoutez un attribut de Guid pour la classe SimpleProjectFactory.Add a Guid attribute to the SimpleProjectFactory class. La valeur de l’attribut est le nouveau GUID de fabrique de projet.The value of the attribute is the new project factory GUID.

    [Guid(SimpleProjectPackage.SimpleProjectFactoryString)]  
    class SimpleProjectFactory  
    {  
    }  
    

    Vous pouvez maintenant enregistrer votre modèle de projet.Now you can register your project template.

Pour enregistrer le modèle de projetTo register the project template

  1. Dans SimpleProjectPackage.cs, ajoutez une ProvideProjectFactoryAttribute d’attribut à la classe SimpleProjectPackage, comme suit.In SimpleProjectPackage.cs, add a ProvideProjectFactoryAttribute attribute to the SimpleProjectPackage class, as follows.

    [ProvideProjectFactory(    typeof(SimpleProjectFactory),     "Simple Project",   
        "Simple Project Files (*.myproj);*.myproj", "myproj", "myproj",   
        @"Templates\Projects\SimpleProject",     LanguageVsTemplate = "SimpleProject")]  
    [Guid(SimpleProjectPackage.PackageGuidString)]  
    public sealed class SimpleProjectPackage : Package  
    
  2. Régénérez la solution et vérifiez qu’il se génère sans erreur.Rebuild the solution and verify that it builds without errors.

    La reconstruction enregistre le modèle de projet.Rebuilding registers the project template.

    Les paramètres defaultProjectExtension et possibleProjectExtensions sont définies sur l’extension de nom de fichier de projet (.myproj).The parameters defaultProjectExtension and possibleProjectExtensions are set to the project file name extension (.myproj). Le projectTemplatesDirectory paramètre est défini sur le chemin d’accès relatif du dossier de modèles.The projectTemplatesDirectory parameter is set to the relative path of the Templates folder. Lors de la build, ce chemin d’accès est convertie en une génération complète et ajouté au Registre pour inscrire le système de projet.During the build, this path will be converted to a full build and added to the registry to register the project system.

Test de l’inscription de modèleTesting the Template Registration

Inscription de modèle indique à Visual Studio l’emplacement de votre dossier de modèles de projet pour que Visual Studio puisse afficher le nom du modèle et l’icône dans le nouveau projet boîte de dialogue.Template registration tells Visual Studio the location of your project template folder so that Visual Studio can display the template name and icon in the New Project dialog box.

Pour tester l’inscription de modèleTo test the template registration

  1. Appuyez sur F5 pour démarrer le débogage d’une instance expérimentale de Visual Studio.Press F5 to start debugging an experimental instance of Visual Studio.

  2. Dans l’instance expérimentale, créez un nouveau projet de votre type de projet nouvellement créé.In the experimental instance, create a new project of your newly-created project type. Dans le nouveau projet boîte de dialogue, vous devez voir SimpleProject sous modèles installés.In the New Project dialog box, you should see SimpleProject under Installed templates.

    Vous disposez maintenant d’une fabrique de projet qui est enregistrée.Now you have a project factory that is registered. Toutefois, il ne peut pas encore créer un projet.However, it cannot yet create a project. Le package de projet et de la fabrique de projet fonctionnent ensemble pour créer et initialiser un projet.The project package and project factory work together to create and initialize a project.

Ajoutez le code de Managed Package FrameworkAdd the Managed Package Framework code

Implémenter la connexion entre le package du projet et de la fabrique de projets.Implement the connection between the project package and the project factory.

  • Importez les fichiers de code source pour Managed Package Framework.Import the source-code files for the Managed Package Framework.

    1. Décharger le projet SimpleProject (dans l’Explorateur de solutions, sélectionnez le nœud de projet, dans le menu contextuel, cliquez sur décharger le projet.) et ouvrez le fichier projet dans l’éditeur XML.Unload the SimpleProject project (in Solution Explorer, select the project node and on the context menu click Unload Project.) and open the project file in the XML editor.

    2. Ajoutez les blocs suivants au fichier projet (juste au-dessus du <importation > blocs).Add the following blocks to the project file (just above the <Import> blocks). La valeur ProjectBasePath l’emplacement du fichier ProjectBase.files dans le code de Managed Package Framework que vous venez de télécharger.Set ProjectBasePath to the location of the ProjectBase.files file in the Managed Package Framework code you just downloaded. Vous devrez peut-être ajouter une barre oblique inverse pour le chemin d’accès.You might have to add a backslash to the pathname. Si vous ne le faites pas, le projet peut échouer rechercher le code de Managed Package Framework.If you do not, the project might fail to find the Managed Package Framework code.

      <PropertyGroup>  
           <ProjectBasePath>your path here\</ProjectBasePath>  
           <RegisterWithCodebase>true</RegisterWithCodebase>  
        </PropertyGroup>  
        <Import Project="$(ProjectBasePath)\ProjectBase.Files" />  
      

      Important

      N’oubliez pas la barre oblique inverse à la fin du chemin d’accès.Don't forget the backslash at the end of the path.

    3. Recharger le projet.Reload the project.

    4. Ajoutez des références aux assemblys suivants :Add references to the following assemblies:

      • Microsoft.VisualStudio.Designer.Interfaces (dans <installation d’extensibilité Visual Studio > \VisualStudioIntegration\Common\Assemblies\v2.0)Microsoft.VisualStudio.Designer.Interfaces (in <VSSDK install>\VisualStudioIntegration\Common\Assemblies\v2.0)

      • WindowsBaseWindowsBase

      • Microsoft.Build.Tasks.v4.0Microsoft.Build.Tasks.v4.0

Pour initialiser la fabrique de projetsTo initialize the project factory

  1. Dans le fichier SimpleProjectPackage.cs, ajoutez le code suivant using instruction.In the SimpleProjectPackage.cs file, add the following using statement.

    using Microsoft.VisualStudio.Project;  
    
  2. Dériver les SimpleProjectPackage classe Microsoft.VisualStudio.Package.ProjectPackage.Derive the SimpleProjectPackage class from Microsoft.VisualStudio.Package.ProjectPackage.

    public sealed class SimpleProjectPackage : ProjectPackage  
    
  3. Inscrire la fabrique de projet.Register the project factory. Ajoutez la ligne suivante à la SimpleProjectPackage.Initialize (méthode), juste après base.Initialize.Add the following line to the SimpleProjectPackage.Initialize method, just after base.Initialize.

    base.Initialize();  
    this.RegisterProjectFactory(new SimpleProjectFactory(this));  
    
  4. Implémente la propriété abstraite ProductUserContext:Implement the abstract property ProductUserContext:

    public override string ProductUserContext  
        {  
            get { return ""; }  
    }  
    
  5. Dans SimpleProjectFactory.cs, ajoutez le code suivant using instruction après existants using instructions.In SimpleProjectFactory.cs, add the following using statement after the existing using statements.

    using Microsoft.VisualStudio.Project;  
    
  6. Dériver les SimpleProjectFactory classe ProjectFactory.Derive the SimpleProjectFactory class from ProjectFactory.

    class SimpleProjectFactory : ProjectFactory  
    
  7. Ajoutez la méthode suivante factice pour le SimpleProjectFactory classe.Add the following dummy method to the SimpleProjectFactory class. Vous implémentez cette méthode dans une section ultérieure.You will implement this method in a later section.

    protected override ProjectNode CreateProject()  
    {  
        return null;  
    }  
    
  8. Ajoutez le champ et le constructeur suivant la SimpleProjectFactory classe.Add the following field and constructor to the SimpleProjectFactory class. Cela SimpleProjectPackage référence est mis en cache dans un champ privé afin qu’il peut être utilisé lors de la définition d’un site de fournisseur de service.This SimpleProjectPackage reference is cached in a private field so that it can be used in setting a service provider site.

    private SimpleProjectPackage package;  
    
    public SimpleProjectFactory(SimpleProjectPackage package)  
        : base(package)  
    {  
        this.package = package;  
    }  
    
  9. Régénérez la solution et vérifiez qu’il se génère sans erreur.Rebuild the solution and verify that it builds without errors.

L’implémentation de fabrique de projet de testTesting the Project Factory Implementation

Vérifier si le constructeur de votre implémentation de fabrique de projet est appelé.Test whether the constructor for your project factory implementation is called.

Pour tester l’implémentation de fabrique de projetTo test the project factory implementation

  1. Dans le fichier SimpleProjectFactory.cs, définissez un point d’arrêt sur la ligne suivante dans le SimpleProjectFactory constructeur.In the SimpleProjectFactory.cs file, set a breakpoint on the following line in the SimpleProjectFactory constructor.

    this.package = package;  
    
  2. Appuyez sur F5 pour démarrer une instance expérimentale de Visual Studio.Press F5 to start an experimental instance of Visual Studio.

  3. Dans l’instance expérimentale, commencer à créer un nouveau projet. Dans le nouveau projet boîte de dialogue, sélectionnez le SimpleProject type de projet, puis cliquez sur OK.In the experimental instance, start to create a new project.In the New Project dialog box, select the SimpleProject project type and then click OK. L'exécution s'arrête au point d'arrêt.Execution stops at the breakpoint.

  4. Désactivez le point d’arrêt et arrêter le débogage.Clear the breakpoint and stop debugging. Étant donné que nous n’avons pas encore créé un nœud de projet, le code de création de projet toujours lève des exceptions.Since we have not created a project node yet, the project creation code still throws exceptions.

Extension de la classe de nœud de projetExtending the Project Node Class

Maintenant que vous pouvez implémenter la SimpleProjectNode (classe), qui dérive de la ProjectNode classe.Now you can implement the SimpleProjectNode class, which derives from the ProjectNode class. La ProjectNode classe de base gère les tâches suivantes de la création du projet :The ProjectNode base class handles the following tasks of project creation:

  • Copie le fichier de modèle de projet, SimpleProject.myproj, vers le nouveau dossier de projet.Copies the project template file, SimpleProject.myproj, to the new project folder. La copie est renommée en fonction du nom entré dans le nouveau projet boîte de dialogue.The copy is renamed according to the name that is entered in the New Project dialog box. Le ProjectGuid valeur de propriété est remplacée par un nouveau GUID.The ProjectGuid property value is replaced by a new GUID.

  • Parcourt les éléments MSBuild du fichier de modèle de projet, SimpleProject.myproj et de recherche Compile éléments.Traverses the MSBuild elements of the project template file, SimpleProject.myproj, and looks for Compile elements. Pour chaque Compile fichier cible, copie le fichier dans le dossier du projet.For each Compile target file, copies the file to the new project folder.

    Dérivé SimpleProjectNode classe gère ces tâches :The derived SimpleProjectNode class handles these tasks:

  • Permet des icônes pour les nœuds de projet et le fichier dans l’Explorateur de solutions pour être créé ou sélectionné.Enables icons for project and file nodes in Solution Explorer to be created or selected.

  • Permet les substitutions de paramètre de modèle de projet supplémentaires être spécifié.Enables additional project template parameter substitutions to be specified.

Pour étendre la classe nœud de projetTo extend the project node class

  1. Ajoutez une classe nommée SimpleProjectNode.cs.Add a class named SimpleProjectNode.cs.

  2. Remplacez le code existant par le code ci-dessous.Replace the existing code with the following code.

    using System;  
    using System.Collections.Generic;  
    using Microsoft.VisualStudio.Project;  
    
    namespace SimpleProject  
    {  
        public class SimpleProjectNode : ProjectNode  
        {  
            private SimpleProjectPackage package;  
    
            public SimpleProjectNode(SimpleProjectPackage package)  
            {  
                this.package = package;  
            }  
            public override Guid ProjectGuid  
            {  
                get { return SimpleProjectPackage.guidSimpleProjectFactory; }  
            }  
            public override string ProjectType  
            {  
                get { return "SimpleProjectType"; }  
            }  
    
            public override void AddFileFromTemplate(  
                string source, string target)  
            {  
                this.FileTemplateProcessor.UntokenFile(source, target);  
                this.FileTemplateProcessor.Reset();  
            }  
        }  
    }  
    

    Cela SimpleProjectNode implémentation de la classe a les méthodes substituées :This SimpleProjectNode class implementation has these overridden methods:

  • ProjectGuid, qui retourne le GUID de la fabrique de projets.ProjectGuid, which returns the project factory GUID.

  • ProjectType, qui retourne le nom localisé du type de projet.ProjectType, which returns the localized name of the project type.

  • AddFileFromTemplate, qui copie les fichiers sélectionnés à partir du dossier de modèle pour le projet de destination.AddFileFromTemplate, which copies selected files from the template folder to the destination project. Cette méthode est plus implémentée dans une section ultérieure.This method is further implemented in a later section.

    Le SimpleProjectNode constructeur, comme le SimpleProjectFactory constructeur, met en cache un SimpleProjectPackage référence dans un champ privé pour une utilisation ultérieure.The SimpleProjectNode constructor, like the SimpleProjectFactory constructor, caches a SimpleProjectPackage reference in a private field for later use.

    Pour vous connecter le SimpleProjectFactory classe le SimpleProjectNode (classe), vous devez instancier un nouvel SimpleProjectNode dans le SimpleProjectFactory.CreateProject (méthode) et mettre en cache dans un champ privé pour une utilisation ultérieure.To connect the SimpleProjectFactory class to the SimpleProjectNode class, you must instantiate a new SimpleProjectNode in the SimpleProjectFactory.CreateProject method and cache it in a private field for later use.

Pour connecter la classe de fabrique de projet et de la classe de nœudTo connect the project factory class and the node class

  1. Dans le fichier SimpleProjectFactory.cs, ajoutez le code suivant using instruction :In the SimpleProjectFactory.cs file, add the following using statement:

    using IOleServiceProvider =    Microsoft.VisualStudio.OLE.Interop.IServiceProvider;  
    
  2. Remplacez le SimpleProjectFactory.CreateProject méthode en utilisant le code suivant.Replace the SimpleProjectFactory.CreateProject method by using the following code.

    protected override ProjectNode CreateProject()  
    {  
        SimpleProjectNode project = new SimpleProjectNode(this.package);  
    
        project.SetSite((IOleServiceProvider)        ((IServiceProvider)this.package).GetService(            typeof(IOleServiceProvider)));  
        return project;  
    }  
    
  3. Régénérez la solution et vérifiez qu’il se génère sans erreur.Rebuild the solution and verify that it builds without errors.

Test de la classe de nœud de projetTesting the Project Node Class

Tester votre fabrique de projet pour voir si elle crée une hiérarchie de projet.Test your project factory to see whether it creates a project hierarchy.

Pour tester la classe nœud de projetTo test the project node class

  1. Appuyez sur F5 pour démarrer le débogage.Press F5 to start debugging. Dans l’instance expérimentale, créez un nouveau SimpleProject.In the experimental instance, create a new SimpleProject.

  2. Visual Studio doit appeler votre fabrique de projet pour créer un projet.Visual Studio should call your project factory to create a project.

  3. Fermez l’instance expérimentale de Visual Studio.Close the experimental instance of Visual Studio.

Ajout d’une icône de nœud de projet personnalisésAdding a Custom Project Node Icon

L’icône du nœud de projet dans la section précédente est une icône par défaut.The project node icon in the earlier section is a default icon. Vous pouvez la modifier et une icône personnalisée.You can change it to a custom icon.

Pour ajouter une icône de nœud de projet personnalisésTo add a custom project node icon

  1. Dans le ressources dossier, ajoutez un fichier bitmap nommé SimpleProjectNode.bmp.In the Resources folder, add a bitmap file named SimpleProjectNode.bmp.

  2. Dans le propriétés windows, réduire la bitmap de 16 par 16 pixels.In the Properties windows, reduce the bitmap to 16 by 16 pixels. Vérifiez la bitmap distinct.Make the bitmap distinctive.

    Commande de projet simpleSimple Project Comm

  3. Dans le propriétés fenêtre, de modifier le action de génération de la bitmap à ressource incorporée.In the Properties window, change the Build action of the bitmap to Embedded Resource.

  4. Dans SimpleProjectNode.cs, ajoutez le code suivant using instructions :In SimpleProjectNode.cs, add the following using statements:

    using System.Drawing;  
    using System.Windows.Forms;  
    
  5. Ajouter le champ statique suivant et le constructeur pour la SimpleProjectNode classe.Add the following static field and constructor to the SimpleProjectNode class.

    private static ImageList imageList;  
    
    static SimpleProjectNode()  
    {  
        imageList =        Utilities.GetImageList(            typeof(SimpleProjectNode).Assembly.GetManifestResourceStream(                "SimpleProject.Resources.SimpleProjectNode.bmp"));  
    }  
    
  6. Ajoutez la propriété suivante au début de la SimpleProjectNode classe.Add the following property to the beginning of the SimpleProjectNode class.

    internal static int imageIndex;  
       public override int ImageIndex  
       {  
           get { return imageIndex; }  
       }  
    
  7. Remplacer le constructeur d’instance avec le code suivant.Replace the instance constructor with the following code.

    public SimpleProjectNode(SimpleProjectPackage package)  
    {  
        this.package = package;  
    
        imageIndex = this.ImageHandler.ImageList.Images.Count;  
    
        foreach (Image img in imageList.Images)  
        {  
            this.ImageHandler.AddImage(img);  
        }  
    }  
    

    Pendant la construction statique, SimpleProjectNode extrait la bitmap de nœud de projet à partir des ressources de manifeste d’assembly et met en cache dans un champ privé pour une utilisation ultérieure.During static construction, SimpleProjectNode retrieves the project node bitmap from the assembly manifest resources and caches it in a private field for later use. Notez la syntaxe de la GetManifestResourceStream chemin d’accès de l’image.Notice the syntax of the GetManifestResourceStream image path. Pour afficher les noms des ressources de manifeste incorporés dans un assembly, utilisez le GetManifestResourceNames (méthode).To see the names of the manifest resources embedded in an assembly, use the GetManifestResourceNames method. Lorsque cette méthode est appliquée à la SimpleProject assembly, les résultats doivent être comme suit :When this method is applied to the SimpleProject assembly, the results should be as follows:

  • SimpleProject.Resources.resourcesSimpleProject.Resources.resources

  • VisualStudio.Project.resourcesVisualStudio.Project.resources

  • SimpleProject.VSPackage.resourcesSimpleProject.VSPackage.resources

  • Resources.imagelis.bmpResources.imagelis.bmp

  • Microsoft.VisualStudio.Project.DontShowAgainDialog.resourcesMicrosoft.VisualStudio.Project.DontShowAgainDialog.resources

  • Microsoft.VisualStudio.Project.SecurityWarningDialog.resourcesMicrosoft.VisualStudio.Project.SecurityWarningDialog.resources

  • SimpleProject.Resources.SimpleProjectNode.bmpSimpleProject.Resources.SimpleProjectNode.bmp

    Pendant la construction de l’instance, la ProjectNode classe de base charge Resources.imagelis.bmp, dans lequel sont incorporées bitmaps 16 x 16 couramment utilisées à partir de Resources\imagelis.bmp.During instance construction, the ProjectNode base class loads Resources.imagelis.bmp, in which are embedded commonly used 16 x 16 bitmaps from Resources\imagelis.bmp. Cette liste de bitmap est mises à disposition SimpleProjectNode comme ImageHandler.ImageList.This bitmap list is made available to SimpleProjectNode as ImageHandler.ImageList. SimpleProjectNode Ajoute la bitmap de nœud de projet à la liste.SimpleProjectNode appends the project node bitmap to the list. Le décalage de la bitmap de nœud de projet dans la liste d’images est mis en cache pour une utilisation ultérieure en tant que la valeur public ImageIndex propriété.The offset of the project node bitmap in the image list is cached for later use as the value of the public ImageIndex property. Visual Studio utilise cette propriété pour déterminer quelle image bitmap à afficher en tant que l’icône de nœud de projet.Visual Studio uses this property to determine which bitmap to display as the project node icon.

Test de l’icône de nœud de projet personnalisésTesting the Custom Project Node Icon

Tester votre fabrique de projet pour voir si elle crée une hiérarchie de projet qui possède l’icône de nœud de projet personnalisé.Test your project factory to see whether it creates a project hierarchy that has your custom project node icon.

Pour tester l’icône de nœud de projet personnalisésTo test the custom project node icon

  1. Démarrer le débogage et dans l’instance expérimentale, créez un nouveau SimpleProject.Start debugging, and in the experimental instance create a new SimpleProject.

  2. Dans le projet nouvellement créé, notez que SimpleProjectNode.bmp est utilisée comme icône du nœud de projet.In the newly-created project, notice that SimpleProjectNode.bmp is used as the project node icon.

    Nœud de projet simple nouveau projetSimple Project New Project Node

  3. Dans l’éditeur de code, ouvrez Program.cs.Open Program.cs in the code editor. Vous devez voir le code source qui ressemble au code suivant.You should see source code that resembles the following code.

    using System;  
    using System.Collections.Generic;  
    using System.Text;  
    
    namespace $nameSpace$  
    {  
        public class $className$  
        {  
            static void Main(string[] args)  
            {  
                Console.WriteLine("Hello VSX!!!");  
                Console.ReadKey();  
            }  
        }  
    }  
    

    Notez que les paramètres du modèle $nameSpace$ et $ de $className n’ont pas de nouvelles valeurs.Notice that the template parameters $nameSpace$ and $className$ do not have new values. Vous allez apprendre comment implémenter la substitution de paramètre de modèle dans la section suivante.You will learn how to implement template parameter substitution in the next section.

En remplaçant les paramètres de modèleSubstituting Template Parameters

Dans la section précédente, vous enregistré le modèle de projet avec Visual Studio à l’aide de la ProvideProjectFactory attribut.In an earlier section, you registered the project template with Visual Studio by using the ProvideProjectFactory attribute. Enregistrer le chemin d’accès d’un dossier de modèle de cette manière vous permet d’activer la substitution de paramètre de modèle de base en substituant et en développant la ProjectNode.AddFileFromTemplate classe.Registering the path of a template folder in this manner lets you enable basic template parameter substitution by overriding and expanding the ProjectNode.AddFileFromTemplate class. 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.

Maintenant ajouter du code de remplacement pour le AddFileFromTemplate classe.Now add replacement code to the AddFileFromTemplate class.

Pour remplacer les paramètres de modèleTo substitute template parameters

  1. Dans le fichier SimpleProjectNode.cs, ajoutez le code suivant using instruction.In the SimpleProjectNode.cs file, add the following using statement.

    using System.IO;  
    
  2. Remplacez le AddFileFromTemplate méthode en utilisant le code suivant.Replace the AddFileFromTemplate method by using the following code.

    public override void AddFileFromTemplate(  
        string source, string target)  
    {  
        string nameSpace =   
            this.FileTemplateProcessor.GetFileNamespace(target, this);  
        string className = Path.GetFileNameWithoutExtension(target);  
    
        this.FileTemplateProcessor.AddReplace("$nameSpace$", nameSpace);  
        this.FileTemplateProcessor.AddReplace("$className$", className);  
    
        this.FileTemplateProcessor.UntokenFile(source, target);  
        this.FileTemplateProcessor.Reset();  
    }  
    
  3. Définir un point d’arrêt dans la méthode, juste après la className instruction d’assignation.Set a breakpoint in the method, just after the className assignment statement.

    Les instructions d’assignation déterminent raisonnable pour un espace de noms et un nouveau nom de classe.The assignment statements determine reasonable values for a namespace and a new class name. Les deux ProjectNode.FileTemplateProcessor.AddReplace les appels de méthode remplacement les valeurs de paramètre de modèle correspondant à l’aide de ces nouvelles valeurs.The two ProjectNode.FileTemplateProcessor.AddReplace method calls replace the corresponding template parameter values by using these new values.

Test de la Substitution de paramètre de modèleTesting the Template Parameter Substitution

Vous pouvez maintenant tester la substitution de paramètre de modèle.Now you can test template parameter substitution.

Pour tester la substitution de paramètre de modèleTo test the template parameter substitution

  1. Démarrer le débogage et dans l’instance expérimentale, créez un nouveau SimpleProject.Start debugging, and in the experimental instance create a new SimpleProject.

  2. L’exécution s’arrête au point d’arrêt dans le AddFileFromTemplate (méthode).Execution stops at the breakpoint in the AddFileFromTemplate method.

  3. Examiner les valeurs pour le nameSpace et className paramètres.Examine the values for the nameSpace and className parameters.

    • nameSpace reçoit la valeur de la <RootNamespace > élément dans le fichier de modèle de projet \Templates\Projects\SimpleProject\SimpleProject.myproj.nameSpace is given the value of the <RootNamespace> element in the \Templates\Projects\SimpleProject\SimpleProject.myproj project template file. Dans ce cas, la valeur est « MyRootNamespace ».In this case, the value is "MyRootNamespace".

    • className la valeur du nom de fichier source de classe, sans l’extension de nom de fichier est attribuée.className is given the value of the class source file name, without the file name extension. Dans ce cas, le premier fichier à copier sur le dossier de destination est AssemblyInfo.cs ; Par conséquent, la valeur de nom de classe est « AssemblyInfo ».In this case, the first file to be copied to the destination folder is AssemblyInfo.cs; therefore, the value of className is "AssemblyInfo".

  4. Supprimer le point d’arrêt et appuyez sur F5 pour poursuivre l’exécution.Remove the breakpoint and press F5 to continue execution.

    Visual Studio doit terminer la création d’un projet.Visual Studio should finish creating a project.

  5. Dans l’éditeur de code, ouvrez Program.cs.Open Program.cs in the code editor. Vous devez voir le code source qui ressemble au code suivant.You should see source code that resembles the following code.

    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    
    namespace MyRootNamespace  
    {  
        public class Program  
        {  
            static void Main(string[] args)  
            {  
                Console.WriteLine("Hello VSX!!!");  
                Console.ReadKey();  
            }  
        }  
    }  
    

    Notez que l’espace de noms est désormais « MyRootNamespace » et le nom de classe est désormais « Programme ».Notice that the namespace is now "MyRootNamespace" and the class name is now "Program".

  6. Démarrez le débogage du projet.Start debugging the project. Le nouveau projet doit compiler, exécuter et afficher « Hello VSX !!! »The new project should compile, run, and display "Hello VSX!!!" dans la fenêtre de console.in the console window.

    Commande de projet simpleSimple Project Command

    Félicitations !Congratulations! Vous avez implémenté un système de base projet managé.You have implemented a basic managed project system.