Comment : utiliser des Assistants avec des modèles de projetHow to: Use Wizards with Project Templates

Visual Studio fournit la IWizard interface qui, lorsqu’elle est implémentée, vous permet d’exécuter du code personnalisé lorsqu’un utilisateur crée un projet à partir d’un modèle.Visual Studio provides the IWizard interface that, when implemented, enables you to run custom code when a user creates a project from a template.

Personnalisation des modèles de projet peut servir à afficher l’interface utilisateur personnalisée qui collecte les entrées d’utilisateur pour personnaliser le modèle, ajouter des fichiers supplémentaires au modèle, ou toute autre action autorisée sur un projet.Project template customization can be used to display custom UI that collects user input to customize the template, add additional files to the template, or any other action allowed on a project.

Le IWizard méthodes d’interface sont appelées à différents moments pendant que le projet est en cours de création, dès qu’un utilisateur clique sur OK sur la nouveau projet boîte de dialogue.The IWizard interface methods are called at various times while the project is being created, starting as soon as a user clicks OK on the New Project dialog box. Chaque méthode de l’interface est nommée pour décrire le point auquel elle est appelée.Each method of the interface is named to describe the point at which it is called. Par exemple, Visual Studio appelle RunStarted immédiatement lorsqu’il démarre créer le projet, rendant un bon emplacement pour écrire du code personnalisé pour collecter les entrées d’utilisateur.For example, Visual Studio calls RunStarted immediately when it starts to create the project, making it a good location to write custom code to collect user input.

Création d’un projet de modèle de projet avec un projet VSIXCreating a Project Template Project with a VSIX Project

Commencer la création d’un modèle personnalisé avec le projet modèle projet., qui fait partie de Visual Studio SDK.You start creating a custom template with the project template project., which is part of the Visual Studio SDK. Dans cette procédure, nous allons utiliser un projet de modèle de projet c#, mais il existe également un projet de modèle de projet Visual Basic.In this procedure we will use a C# project template project, but there is also a Visual Basic project template project. Puis vous ajoutez un projet VSIX à la solution qui contient le projet de modèle de projet.Then you add a VSIX project to the solution that contains the project template project.

  1. Créer un projet de modèle de projet c# (dans Visual Studio, fichier > Nouveau > projet > c# > extensibilité > modèle de projet c#).Create a C# project template project (in Visual Studio, File > New > Project > Visual C# > Extensibility > C# Project Template). Nommez-le MyProjectTemplate.Name it MyProjectTemplate.

    Note

    Vous pouvez être invité à installer le Kit de développement logiciel Visual Studio.You may be asked to install the Visual Studio SDK. Pour plus d’informations, consultez l’installation de Visual Studio SDK.For more information, see Installing the Visual Studio SDK.

  2. Ajouter un nouveau projet VSIX (fichier > Nouveau > projet > Visual c# > extensibilité > projet VSIX) dans la même solution que le projet de modèle de projet (dans le l’Explorateur de solutions, sélectionnez le nœud de la solution, avec le bouton droit et sélectionnez Ajouter > Nouveau projet).Add a new VSIX project (File > New > Project > Visual C# > Extensibility > VSIX Project) in the same solution as the project template project (in the Solution Explorer, select the solution node, right-click, and select Add > New Project). Nommez-le MyProjectWizard.Name it MyProjectWizard.

  3. Définissez le projet VSIX comme projet de démarrage.Set the VSIX project as the startup project. Dans le l’Explorateur de solutions, sélectionnez le nœud du projet VSIX, avec le bouton droit et sélectionnez définir comme projet de démarrage.In the Solution Explorer, select the VSIX project node, right-click, and select Set as Startup Project.

  4. Ajouter le modèle de projet comme composant du projet VSIX.Add the template project as an asset of the VSIX project. Dans le l’Explorateur de solutions, sous le nœud du projet VSIX, recherchez le source.extension.vsixmanifest fichier.In the Solution Explorer, under the VSIX project node, find the source.extension.vsixmanifest file. Double-cliquez dessus pour l’ouvrir dans l’éditeur de manifeste.Double-click it to open it in the manifest editor.

  5. Dans l’éditeur de manifeste, sélectionnez le actifs onglet sur le côté gauche de la fenêtre.In the manifest editor, select the Assets tab on the left side of the window.

  6. Dans le actifs onglet, sélectionnez nouveau.In the Assets tab, select New. Dans le ajouter un nouveau composant fenêtre, pour le champ Type, sélectionnez Microsoft.VisualStudio.ProjectTemplate.In the Add New Asset window, for the Type field, select Microsoft.VisualStudio.ProjectTemplate. Dans le Source champ, sélectionnez un projet dans la solution actuelle.In the Source field, select A project in current solution. Dans le projet champ, sélectionnez MyProjectTemplate.In the Project field, select MyProjectTemplate. Cliquez ensuite sur OK.Then click OK.

  7. Générez la solution et commencez le débogage.Build the solution and start debugging. Une seconde instance de Visual Studio apparaît.A second instance of Visual Studio appears. (Cela peut prendre quelques minutes.)(This may take a few minutes.)

  8. Dans la deuxième instance de Visual Studio, essayez de créer un nouveau projet avec votre nouveau modèle.In the second instance of Visual Studio, try to create a new project with your new template. (Fichier > Nouveau > projet > c# > MyProject modèle).(File > New > Project > Visual C# > MyProject Template). Le nouveau projet doit apparaître avec une classe nommée Class1.The new project should appear with a class named Class1. Vous venez de créer un modèle de projet personnalisé !You have now created a custom project template! Arrêter le débogage maintenant.Stop debugging now.

Création d’un Assistant de modèle personnaliséCreating a Custom Template Wizard

Cette rubrique montre comment créer un Assistant personnalisé qui ouvre un Windows Form avant la création du projet.This topic shows how to create a custom wizard that opens a Windows Form before the project is created. Le formulaire permet aux utilisateurs d’ajouter une valeur de paramètre personnalisé est ajoutée au code source pendant la création du projet.The form allows users to add a custom parameter value that is added to the source code during project creation.

  1. Configurer le projet VSIX pour lui permettre de créer un assembly.Set up the VSIX project to allow it to create an assembly.

  2. Dans le l’Explorateur de solutions, sélectionnez le nœud du projet VSIX.In the Solution Explorer, select the VSIX project node. Sous l’Explorateur de solutions, vous devez voir le propriétés fenêtre.Below the Solution Explorer, you should see the Properties window. Si vous ne le faites pas, sélectionnez vue > fenêtre Propriétés, ou appuyez sur F4.If you do not, select View > Properties Window, or press F4. Dans la fenêtre Propriétés, sélectionnez les champs suivants à true:In the Properties window, select the following fields to true:

    • IncludeAssemblyInVSIXContainerIncludeAssemblyInVSIXContainer

    • IncludeDebugSymbolsInVSIXContainerIncludeDebugSymbolsInVSIXContainer

    • IncludeDebugSymbolsInLocalVSIXDeploymentIncludeDebugSymbolsInLocalVSIXDeployment

  3. Ajoutez l’assembly en tant qu’actif pour le projet VSIX.Add the assembly as an asset to the VSIX project. Ouvrez le fichier source.extension.vsixmanifest, puis sélectionnez le actifs onglet. Dans le ajouter un nouveau composant fenêtre, pour Type sélectionnez Microsoft.VisualStudio.Assembly, pour Source sélectionnez A projet dans la solution actuelleet pour projet sélectionnez MyProjectWizard.Open the source.extension.vsixmanifest file and select the Assets tab. In the Add New Asset window, for Type select Microsoft.VisualStudio.Assembly, for Source select A project in current solution, and for Project select MyProjectWizard.

  4. Ajoutez les références suivantes au projet VSIX.Add the following references to the VSIX project. (Dans le l’Explorateur de solutions, sous l’extension VSIX sélectionnez du nœud de projet références, avec le bouton droit, puis sélectionnez ajouter une référence.) Dans le ajouter une référence boîte de dialogue, dans le Framework onglet, recherchez la System.Windows Forms assembly et sélectionnez-le.(In the Solution Explorer, under the VSIX project node select References, right-click, and select Add Reference.) In the Add Reference dialog, in the Framework tab, find the System.Windows Forms assembly and select it. Sélectionnez maintenant le Extensions rechercher de l’onglet le EnvDTE assembly et sélectionnez-le.Now select the Extensions tab. find the EnvDTE assembly and select it. Recherchez également le Microsoft.VisualStudio.TemplateWizardInterface assembly et sélectionnez-le.Also find the Microsoft.VisualStudio.TemplateWizardInterface assembly and select it. Cliquez sur OK.Click OK.

  5. Ajoutez une classe pour l’implémentation de l’Assistant pour le projet VSIX.Add a class for the wizard implementation to the VSIX project. (Dans l’Explorateur de solutions, cliquez sur le nœud du projet VSIX, puis sélectionnez ajouter, puis un nouvel élément, puis classe.) Nom de la classe WizardImplementation.(In the Solution Explorer, right-click the VSIX project node and select Add, then New Item, then Class.) Name the class WizardImplementation.

  6. Remplacez le code dans le WizardImplementationClass.cs fichier avec le code suivant :Replace the code in the WizardImplementationClass.cs file with the following code:

    using System;  
    using System.Collections.Generic;  
    using Microsoft.VisualStudio.TemplateWizard;  
    using System.Windows.Forms;  
    using EnvDTE;  
    
    namespace MyProjectWizard  
    {  
        public class WizardImplementation:IWizard  
        {  
            private UserInputForm inputForm;  
            private string customMessage;  
    
            // This method is called before opening any item that   
            // has the OpenInEditor attribute.  
            public void BeforeOpeningFile(ProjectItem projectItem)  
            {  
            }  
    
            public void ProjectFinishedGenerating(Project project)  
            {  
            }  
    
            // This method is only called for item templates,  
            // not for project templates.  
            public void ProjectItemFinishedGenerating(ProjectItem   
                projectItem)  
            {  
            }  
    
            // This method is called after the project is created.  
            public void RunFinished()  
            {  
            }  
    
            public void RunStarted(object automationObject,  
                Dictionary<string, string> replacementsDictionary,  
                WizardRunKind runKind, object[] customParams)  
            {  
                try  
                {  
                    // Display a form to the user. The form collects   
                    // input for the custom message.  
                    inputForm = new UserInputForm();  
                    inputForm.ShowDialog();  
    
                    customMessage = UserInputForm.CustomMessage;  
    
                    // Add custom parameters.  
                    replacementsDictionary.Add("$custommessage$",   
                        customMessage);  
                }  
                catch (Exception ex)  
                {  
                    MessageBox.Show(ex.ToString());  
                }  
            }  
    
            // This method is only called for item templates,  
            // not for project templates.  
            public bool ShouldAddProjectItem(string filePath)  
            {  
                return true;  
            }          
        }  
    }  
    

    Le UserInputForm référencé dans ce code, vous définirez ultérieurement.The UserInputForm referenced in this code will be implemented later.

    Le WizardImplementation contient des implémentations de méthode pour chaque membre de classe IWizard.The WizardImplementation class contains method implementations for every member of IWizard. Dans cet exemple, uniquement les RunStarted méthode effectue une tâche.In this example, only the RunStarted method performs a task. Toutes les autres méthodes ne fait rien ou retournent true.All other methods either do nothing or return true.

    Le RunStarted méthode accepte quatre paramètres :The RunStarted method accepts four parameters:

    • Un Object paramètre qui peut être converti vers la racine _DTE objet, pour vous permettre de personnaliser le projet.An Object parameter that can be cast to the root _DTE object, to enable you to customize the project.

    • A Dictionary<TKey,TValue> paramètre qui contient une collection de tous les paramètres prédéfinis dans le modèle.A Dictionary<TKey,TValue> parameter that contains a collection of all pre-defined parameters in the template. Pour plus d’informations sur les paramètres de modèle, consultez les paramètres de modèle.For more information on template parameters, see Template Parameters.

    • A WizardRunKind paramètre qui contient des informations sur le type de modèle est utilisé.A WizardRunKind parameter that contains information about what kind of template is being used.

    • Un Object tableau qui contient un jeu de paramètres passé à l’Assistant par Visual Studio.An Object array that contains a set of parameters passed to the wizard by Visual Studio.

      Cet exemple ajoute une valeur de paramètre à partir du formulaire d’entrée utilisateur pour le Dictionary<TKey,TValue> paramètre.This example adds a parameter value from the user input form to the Dictionary<TKey,TValue> parameter. Chaque instance de la $custommessage$ paramètre dans le projet sera remplacé par le texte entré par l’utilisateur.Every instance of the $custommessage$ parameter in the project will be replaced with the text entered by the user. Vous devez ajouter les assemblys suivants à votre projet : système et System.Drawing.You must add the following assemblies to your project: System and System.Drawing.

  7. Créer maintenant les UserInputForm.Now create the UserInputForm. Dans le WizardImplementation.cs , ajoutez le code suivant après la fin de la WizardImplementation classe.In the WizardImplementation.cs file, add the following code after the end of the WizardImplementation class.

    public partial class UserInputForm : Form  
        {  
            private static string customMessage;  
            private TextBox textBox1;  
            private Button button1;  
    
            public UserInputForm()  
            {  
                this.Size = new System.Drawing.Size(155, 265);   
    
                button1 = new Button();  
                button1.Location = new System.Drawing.Point(90, 25);  
                button1.Size = new System.Drawing.Size(50, 25);  
                button1.Click += button1_Click;  
                this.Controls.Add(button1);  
    
                textBox1 = new TextBox();  
                textBox1.Location = new System.Drawing.Point(10, 25);  
                textBox1.Size = new System.Drawing.Size(70, 20);  
                this.Controls.Add(textBox1);  
            }  
            public static string CustomMessage  
            {  
                get  
                {  
                    return customMessage;  
                }  
                set  
                {  
                    customMessage = value;  
                }     
            }  
            private void button1_Click(object sender, EventArgs e)  
            {  
                customMessage = textBox1.Text;  
                this.Close();
            }  
        }  
    

    Le formulaire d’entrée utilisateur fournit une forme simple pour entrer un paramètre personnalisé.The user input form provides a simple form for entering a custom parameter. Le formulaire contient une zone de texte nommée textBox1 et un bouton nommé button1.The form contains a text box named textBox1 and a button named button1. Lorsque le bouton est activé, le texte à partir de la zone de texte est stocké dans le customMessage paramètre.When the button is clicked, the text from the text box is stored in the customMessage parameter.

L’Assistant connexion pour le modèle personnaliséConnect the Wizard to the Custom Template

Dans l’ordre pour votre modèle de projet personnalisé à utiliser votre Assistant personnalisé, vous devez signer l’assembly de l’Assistant et ajouter des lignes à votre modèle de projet personnalisé, il faut où trouver l’implémentation de l’Assistant Création d’un nouveau projet.In order for your custom project template to use your custom wizard, you need to sign the wizard assembly and add some lines to your custom project template to let it know where to find the wizard implementation when a new project is created.

  1. Signez l’assembly.Sign the assembly. Dans le l’Explorateur de solutions, sélectionnez le projet VSIX, avec le bouton droit et sélectionnez propriétés du projet.In the Solution Explorer, select the VSIX project, right-click, and select Project Properties.

  2. Dans le propriétés du projet fenêtre, sélectionnez le signature onglet dans le signature onglet, vérifiez signer l’assembly.In the Project Properties window, select the Signing tab. in the Signing tab, check Sign the assembly. Dans le choisir un fichier de clé de nom fort champ, sélectionnez <Nouveau >.In the Choose a strong name key file field, select <New>. Dans le créer une clé de nom fort fenêtre, dans le nom de fichier de clé , tapez key.snk.In the Create Strong Name Key window, in the Key file name field, type key.snk. Désactivez le protéger mon fichier de clé avec un mot de passe champ.Uncheck the Protect my key file with a password field.

  3. Dans le l’Explorateur de solutions, sélectionnez le projet VSIX et recherchez le propriétés fenêtre.In the Solution Explorer, select the VSIX project and find the Properties window.

  4. Définir le répertoire de sortie à la sortie de génération de copie au champ true.Set the Copy Build Output to Output Directory field to true. Ainsi, l’assembly doit être copié dans le répertoire de sortie lors de la reconstruction de la solution.This allows the assembly to be copied into the output directory when the solution is rebuilt. Il est toujours contenue dans le fichier .vsix.It is still contained in the .vsix file. Vous devez voir l’assembly afin de déterminer sa clé de signature.You need to see the assembly in order to find out its signing key.

  5. Régénérez la solution.Rebuild the solution.

  6. Vous pouvez maintenant rechercher le fichier key.snk dans le répertoire du projet MyProjectWizard (<votre emplacement de disque > \MyProjectTemplate\MyProjectWizard\key.snk).You can now find the key.snk file in the MyProjectWizard project directory (<your disk location>\MyProjectTemplate\MyProjectWizard\key.snk). Copiez le fichier key.snk.Copy the key.snk file.

  7. Accédez au répertoire de sortie et de trouver l’assembly (<votre emplacement de disque > \MyProjectTemplate/MyProjectWizard\bin\Debug\MyProjectWizard.dll).Go to the output directory and find the assembly (<your disk location>\MyProjectTemplate/MyProjectWizard\bin\Debug\MyProjectWizard.dll). Collez le fichier key.snk ici.Paste the key.snk file here. (Cela n’est pas absolument nécessaire, mais cela facilite les étapes suivantes).(This isn't absolutely necessary, but it will make the following steps easier.)

  8. Ouvrez une fenêtre de commande et accédez au répertoire dans lequel l’assembly a été créé.Open a command window, and change to the directory in which the assembly has been created.

  9. Rechercher les sn.exe outil de signature.Find the sn.exe signing tool. Par exemple, sur un système d’exploitation de 64 bits de Windows 10, un chemin d’accès classique serait la suivante :For example, on a Windows 10 64-bit operating system, a typical path would be the following:

    Outils de \Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 C:\Program (x86) de fichiersC:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools

    Si vous ne trouvez pas l’outil, essayez d’exécuter où /R. Sn.exe dans la fenêtre de commande.If you can't find the tool, try running where /R . sn.exe in the command window. Prenez note du chemin d’accès.Make a note of the path.

  10. Extraire la clé publique du fichier key.snk.Extract the public key from the key.snk file. Dans la fenêtre de commande, tapezIn the command window, type

    <emplacement de sn.exe > \sn.exe -p key.snk outfile.key.<location of sn.exe>\sn.exe -p key.snk outfile.key.

    N’oubliez pas délimiter le chemin d’accès de sn.exe entre guillemets s’il existe des espaces dans les noms de répertoires.Don't forget to surround the path of sn.exe with quotation marks if there are spaces in the directory names!

  11. Obtenir la clé publique jeton dans le fichier de sortie :Get the public key token from the outfile:

    <emplacement de sn.exe > \sn.exe -t outfile.key.<location of sn.exe>\sn.exe -t outfile.key.

    Là encore, n’oubliez pas les guillemets.Again, don't forget the quotation marks. Vous devez voir une ligne dans la sortie comme suitYou should see a line in the output like this

    Jeton de clé publique Public key token is

    Prenez note de cette valeur.Make a note of this value.

  12. Ajouter la référence à l’aide personnalisée pour le fichier .vstemplate du modèle de projet.Add the reference to the custom wizard to the .vstemplate file of the project template. Dans l’Explorateur de solutions, recherchez le fichier nommé MyProjectTemplate.vstemplate, puis ouvrez-le.In the Solution Explorer, find the file named MyProjectTemplate.vstemplate, and open it. Après la fin de la <TemplateContent > section, ajoutez la section suivante :After the end of the <TemplateContent> section, add the following section:

    <WizardExtension>  
        <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=token</Assembly>  
        <FullClassName>MyProjectWizard.WizardImplementation</FullClassName>  
    </WizardExtension>  
    

    MyProjectWizard est le nom de l’assembly, et jeton est le jeton que vous avez copié à l’étape précédente.Where MyProjectWizard is the name of the assembly, and token is the token you copied in the previous step.

  13. Enregistrer tous les fichiers du projet et régénérez.Save all the files in the project and rebuild.

Ajout du paramètre personnalisé au modèleAdding the Custom Parameter to the Template

Dans cet exemple, le projet utilisé comme modèle affiche le message spécifié dans le formulaire d’entrée d’utilisateur de l’Assistant personnalisé.In this example, the project used as the template displays the message specified in the user input form of the custom wizard.

  1. Dans l’Explorateur de solutions, accédez à la MyProjectTemplate de projet et ouvrez Class1.cs.In the Solution Explorer, go to the MyProjectTemplate project and open Class1.cs.

  2. Dans le Main (méthode) de l’application, ajoutez la ligne suivante de code.In the Main method of the application, add the following line of code.

    Console.WriteLine("$custommessage$");  
    

    Le paramètre $custommessage$ est remplacé par le texte entré dans le formulaire d’entrée utilisateur lorsqu’un projet est créé à partir du modèle.The parameter $custommessage$ is replaced with the text entered in the user input form when a project is created from the template.

    Voici le fichier de code complet avant qu’il a été exporté vers un modèle.Here is the full code file before it has been exported to a template.

using System;  
using System.Collections.Generic;  
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;  
$endif$using System.Text;  

namespace $safeprojectname$  
{  
    public class Class1  
    {  
          static void Main(string[] args)  
          {  
               Console.WriteLine("$custommessage$");  
          }  
    }  
}  

À l’aide de l’Assistant personnaliséUsing the Custom Wizard

Vous pouvez maintenant créer un projet à partir de votre modèle et utiliser l’Assistant personnalisé.Now you can create a project from your template and use the custom wizard.

  1. Régénérez la solution et démarrer le débogage.Rebuild the solution and start debugging. Une seconde instance de Visual Studio doit apparaître.A second instance of Visual Studio should appear.

  2. Créer un nouveau projet MyProjectTemplate.Create a new MyProjectTemplate project. (Fichier > Nouveau > projet > c# > MyProjectTemplate)(File > New > Project > Visual C# > MyProjectTemplate)

  3. Dans le nouveau projet boîte de dialogue, localisez votre modèle, tapez un nom, puis cliquez sur OK.In the New Project dialog box, locate your template, type a name, and click OK.

    Le formulaire d’entrée de l’utilisateur d’Assistant s’ouvre.The wizard user input form opens.

  4. Tapez une valeur pour le paramètre personnalisé, puis cliquez sur le bouton.Type a value for the custom parameter and click the button.

    Le formulaire d’entrée utilisateur l’Assistant se ferme et un projet est créé à partir du modèle.The wizard user input form closes, and a project is created from the template.

  5. Dans l’Explorateur de solutions, cliquez sur le fichier de code source, cliquez sur afficher le Code.In Solution Explorer, right-click the source code file and click View Code.

    Notez que $custommessage$ a été remplacé par le texte entré dans le formulaire d’entrée de l’utilisateur d’Assistant.Notice that $custommessage$ has been replaced with the text entered in the wizard user input form.

Voir aussiSee Also

IWizard
Personnalisation des modèlesCustomizing Templates
Élément WizardExtension (modèles Visual Studio)WizardExtension Element (Visual Studio Templates)
Packages NuGet dans des modèles Visual StudioNuGet packages in Visual Studio templates