Procédure pas - à - pas : créer un VSPackage (partie de 4)
Vous pouvez ajouter des fonctionnalités à Visual Studio en créant un VSPackage. Étant donné qu'un VSPackage est un module de logiciels, il peut être distribué à d'autres personnes afin qu'ils puissent étendre Visual Studio sur leur propre ordinateur.
À l'aide de le modèle de package Visual Studio, vous pouvez effectuer un projet qui possède déjà les fichiers sources et les fichiers de configuration qui sont requis pour créer un VSPackage. Le projet inclut un fichier qui définit une classe que vous nommez lorsque vous créez le projet. Cette classe, dérivée d'une classe managée du package (MPF) nommé Package, inclut des attributs qui déterminent le VSPackage doit s'exécuter dans Visual Studio. La classe du package contient le code d'initialisation et tout autre code tel que les gestionnaires de commande de menu. cette classe est la base du VSPackage.
Cette procédure pas - à - pas explique comment créer un VSPackage et le personnaliser, comme suit :
Créez un VSPackage à l'aide de le modèle de package.
Implémentez un gestionnaire de commandes de menu.
ajoutez un raccourci clavier.
Ajoutez des informations personnalisées à l'écran de démarrage Visual Studio et à la boîte de dialogue de À propos de .
Cette procédure pas - à - pas fait partie d'une série de procédures qui explique comment étendre l'environnement de développement intégré Visual (IDE) Studio. Pour plus d'informations, consultez Procédures pas - à - pas pour personnaliser Visual Studio à l'aide de les VSPackages.
Composants requis
Pour exécuter cette procédure, vous devez installer Kit de développement logiciel Visual Studio 2010.
Notes
Pour plus d'informations sur le kit de développement Visual Studio, consultez Étendre la présentation de Visual Studio.Pour savoir comment télécharger le kit de développement Visual Studio, consultez Visual Studio Extensibility Developer Center sur le site Web MSDN.
Emplacements de modèle pour le modèle de package Visual Studio
Le modèle de package Visual Studio se trouve dans ces emplacements dans la boîte de dialogue de Nouveau projet :
Sous l'extensibilité Visual Basic. Le langage par défaut du projet est en Visual Basic.
Sous l'extensibilité c#. Le langage par défaut du projet est c#.
Sous d'autres projets contenus l'extensibilité. Le langage par défaut du projet est en C++.
Créer un VSPackage à l'aide de le modèle de package
Cette section indique comment créer une solution d'un VSPackage dans Visual Studio.
Pour créer une solution de base d'un VSPackage
Créez un VSPackage à l'aide de le modèle de projet de package Visual Studio.
Sur la page d'accueil, cliquez sur Suivant.
Dans la page de Sélectionner un langage de programmation , sélectionnez Visual C# ou Visual Basic, sélectionnez générez un nouveau fichier de clé pour signer l'assembly, puis cliquez sur Suivant.
Dans la page de Les informations de base d'un VSPackage , dans la zone nom d'un VSPackage, le type FirstPackage, et reçoivent les paramètres par défaut restants. Le nom de la société et le nom du projet sont combinés pour créer l'espace de noms pour le package.
Cliquez sur Suivant.
Dans la page de Sélectionnez les options d'un VSPackage , sélectionnez Commande de menu, puis cliquez sur Suivant.
Sur la page d' options de commande , dans la zone de nom de la commande , tapez première commande. (Ce texte apparaît dans le menu de Visual Studio.) Dans la zone d' ID de commande , tapez cmdidFirstCommand. (Cet identificateur sera utilisée dans le code pour identifier la commande.)
Cliquez sur Suivant.
Dans la page de sélectionnez les options de test , cliquez sur Terminer.
Le modèle crée un projet Visual Studio dans laquelle la fonctionnalité de base. Vous pouvez l'essayer en appuyant sur F5, qui génère le projet et l'ouvre dans une autre instance de Visual Studio en mode débogage (également appelé la génération expérimentale de Visual Studio).
Notes
Lorsque vous générez le projet la première fois, Visual Studio peut sembler cesser de répondre et vous pouvez recevoir un message que Visual Studio est occupé.Passez simplement le message et attendre que Visual Studio s'ouvre et le package est chargé.
Dans la génération expérimentale, dans le menu d' Outils , une commande nommée première commande doit s'afficher. Notez que la première commande est le nom que vous avez tapé dans la page d' options de commande du modèle.
Cliquez sur première commande. Un message similaire à la suivante doit s'afficher.
Révision du gestionnaire de commande de menu
Le message qui s'affiche lorsque vous cliquez sur première commande dans le menu d' Outils provient de code dans le gestionnaire pour la commande de menu. Ce gestionnaire dans le fichier de FirstPackage.cs ou de FirstPackage.vb.
Pour tester le gestionnaire d'élément de menu
dans Explorateur de solutions, ouvrez FirstPackage.cs ou FirstPackage.vb.
recherchez la classe de FirstPackage. la classe de FirstPackage est définie comme suit.
Public NotInheritable Class FirstPackage Inherits Package
public sealed class FirstPackage : Package
Notez que la classe est dérivée de la classe Package de MPF.
Rechercher du code pour le gestionnaire de menu, qui est implémentée par la méthode MenuItemCallback. La fonction gestionnaire de menu est une méthode type de gestionnaire d'événements Windows Forms.
Private Sub MenuItemCallback(ByVal sender As Object, ByVal e As EventArgs) ' Show a Message Box to prove we were here Dim uiShell As IVsUIShell = TryCast(GetService(GetType(SVsUIShell)), IVsUIShell) Dim clsid As Guid = Guid.Empty Dim result As Integer Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(0, clsid, "FirstPackage", String.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", Me.GetType().Name), String.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, result)) End Sub
private void MenuItemCallback(object sender, EventArgs e) { IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell)); Guid clsid = Guid.Empty; int result; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure( uiShell.ShowMessageBox( 0, ref clsid, "FirstPackage", string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.ToString()), string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, out result)); }
ajouter un raccourci clavier
par défaut, les commandes de menu qui sont créées par le modèle de package n'ont pas un raccourci clavier. Vous pouvez en ajouter une à la première commande.
pour ajouter un raccourci clavier par défaut
dans Explorateur de solutions, ouvrez First.vsct.
Le fichier s'ouvre dans l'éditeur XML dans Visual Studio.
Recherchez la fin de l'élément de commandes, qui est indiqué par la balise d' </Commands> .
ajoutez les lignes suivantes entre la balise d' </Commands> et la balise d' <Symbols> .
<KeyBindings> <KeyBinding guid="guidFirstCmdSet" id="cmdidFirstCommand" editor="guidVSStd97" key1="M" mod1="(control shift)"/> </KeyBindings>
Cet élément de KeyBinding comporte plusieurs attributs. Les attributs d' guid et d' id déterminent quelle commande reçoit le raccourci clavier. Le GUID est un GUID du VSPackage, et l'identificateur est l'identificateur de commande que vous avez tapé lorsque vous avez exécuté le modèle. Les symboles sont définis dans la section de symboles, comme suit.
<Symbols> <GuidSymbol name="guidFirstCmdSet" value="{600efde8-1f5e-4df5-bc22-06074a411975}"> <IDSymbol name="cmdidFirstCommand" value="0x0100" /> </GuidSymbol>
La valeur de l'attribut d' editor est un GUID qui représente le contexte dans lequel le raccourci clavier sera disponible. Dans Visual Studio, la liaison d'un raccourci clavier à une commande peut se limiter les fenêtres particulières ou être rendue globale (autrement dit, disponible partout dans Visual Studio). par exemple, dans un éditeur de texte, CTRL+I peut exécuter la commande incrémentielle de recherche, mais dans Explorateur de solutions, CTRL+I n'a aucune combinaison de touches ; par conséquent, CTRL+I est uniquement disponible dans l'éditeur de texte. Dans cette procédure pas - à - pas, le raccourci clavier est conçu pour être global. par conséquent, la valeur de l'attribut d'éditeur est guidVSStd97, qui est la valeur qui rend un raccourci clavier global.
key1 et mod1 attributs l'ensemble de la touche et le modificateur qui doivent être appuyés sur pour activer le raccourci clavier. Pour la valeur de key1, toutes les touches du clavier sont disponibles sous forme de jeton, par exemple, « M » pour la lettre M et « VK_F5 » pour la touche de fonction F5. La valeur de mod1 peut être « ALT », « contrôle », ou « déplacez », séparées par des espaces, dans toute combinaison.
Dans cette procédure pas - à - pas, la valeur de key1 est M et la valeur de mod1 est (Control Shift). Par conséquent, le raccourci clavier est CTRL+MAJ+M.
Dans le menu Déboguer, cliquez sur Exécuter sans débogage.
Dans la génération expérimentale de Visual Studio, dans le menu d' Outils , CTRL+MAJ+M doit être affiché en regard de première commande.
Appuyez sur CTRL+MAJ+M. Vous devez voir le même message qui s'affiche lorsque vous cliquez sur première commande dans le menu d' Outils .
Pour plus d'informations sur les fichiers de .vsct, consultez Référence du schéma XML VSCT.
Les informations personnalisées à ajouter à la boîte de dialogue about
Vous pouvez inclure une icône et les informations relatives à votre package dans la boîte de dialogue de À propos de . Pour ce faire, vous devez apporter les modifications suivantes à la solution :
Modifiez les arguments d' InstalledProductRegistrationAttribute pour la classe principale d'un VSPackage.
Implémentez l'interface d' IVsInstalledProduct pour la classe principale d'un VSPackage.
Ajoutez une icône dans le dossier ressources.
référencez l'icône dans le fichier de VSPackage.resx.
La classe principale d'un VSPackage utilise l'attribut d'InstalledProductRegistration pour spécifier où trouver des informations pour la boîte de dialogue de À propos de . Dans cette procédure pas - à - pas, la classe principale est nommée FirstPackage, et elle peut être modifiée en ouvrant FirstPackage.cs ou FirstPackage.vb.
le nouveau modèle de projet génère l'attribut suivant d'InstalledProductRegistration.
<InstalledProductRegistration( false, "#110", "#112", "1.0", IconResourceID := 400)>
[InstalledProductRegistration( false, "#110", "#112", "1.0", IconResourceID = 400)]
Les ID « #110 » et « #112 » de ressources font référence aux ressources de type chaîne définies dans le fichier de VSPackage.resx, comme suit :
110 fait référence à FirstPackage
112 fait référence aux informations sur mon VSPackage
IconResourceID 400 fait référence au fichier de Package.ico dans le dossier ressources, défini dans le fichier de VSPackage.resx comme suit.
<data name="400" type="System.Resources.ResXFileRef,
System.Windows.Forms">
<value>Resources\Package.ico;System.Drawing.Icon, System.Drawing,
Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a
</value>
</data>
Pour personnaliser la boîte de dialogue de À propos de , modifiez le premier argument de l'attribut d'InstalledProductRegistration à true, afin que votre VSPackage puisse fournir des informations appropriées via l'interface d'IVsInstalledProduct.
Pour ajouter des informations personnalisées à l'écran de démarrage et à environ la boîte de dialogue
FirstPackage.cs ou FirstPackage.vb ouverts, recherchez l'attribut d'InstalledProductRegistration, et modifier ses arguments comme suit.
InstalledProductRegistration(True, Nothing, Nothing, Nothing)
[InstalledProductRegistration(true, null, null, null)]
dérivez la classe de FirstPackage du package et de l'IVsInstalledProduct.
Public NotInheritable Class FirstPackage Inherits Package Implements IVsInstalledProduct
public sealed class FirstPackage : Package, IVsInstalledProduct
implémentez implicitement l'interface d'IVsInstalledProduct. Cette étape est différente pour c# et Visual Basic.
En c#, implémentez implicitement l'interface d'IVsInstalledProduct en pointant la souris IVsInstalledProduct. Lorsque le menu Intellisense apparaît, cliquez sur le premier élément.
De cette façon ajoute les méthodes stub suivant à la classe de FirstPackage. Dans une étape ultérieure, vous compléterez les méthodes.
public int IdBmpSplash(out uint pIdBmp) { throw new NotImplementedException(); } public int IdIcoLogoForAboutbox(out uint pIdIco) { throw new NotImplementedException(); } public int OfficialName(out string pbstrName) { throw new NotImplementedException(); } public int ProductDetails(out string pbstrProductDetails) { throw new NotImplementedException(); } public int ProductID(out string pbstrPID) { throw new NotImplementedException(); }
En Visual Basic, ajoutez le code suivant à la fin de la classe de FirstPackage. Dans une étape ultérieure, vous compléterez les méthodes.
Function ProductDetails( _ <OutAttribute()> ByRef pbstrProductDetails As String) _ As Integer End Function Public Function IdBmpSplash(ByRef pIdBmp As UInteger) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.IdBmpSplash End Function Public Function IdIcoLogoForAboutbox(ByRef pIdIco As UInteger) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.IdIcoLogoForAboutbox End Function Public Function OfficialName(ByRef pbstrName As String) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.OfficialName End Function Public Function ProductID(ByRef pbstrPID As String) As Integer Implements Microsoft.VisualStudio.Shell.Interop.IVsInstalledProduct.ProductID End Function
copiez Icon.ico de <Visual Studio SDK installation path> \Common7\IDE\NewFileItems et collez-le dans le dossier de ressources dans la solution de package.
Dans Explorateur de solutions, cliquez avec le bouton droit sur le dossier ressources, pointez sur Ajouter, puis cliquez sur Élément existant. Définissez le filtre de type de fichier à tous les fichiers (*.*) puis ajoutez Icon.ico.
Dans Explorateur de solutions, cliquez avec le bouton droit sur VSPackage.resx, puis cliquez sur Ouvrir avec. sélectionnez Éditeur XML et cliquez sur OK pour ouvrir le fichier dans l'éditeur XML.
Ajoutez les lignes suivantes juste avant la balise à </root> .
<data name="500" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>Resources\GenericPackage.ico; System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a </value> </data>
Ce balisage déclarent Icon.ico comme ID de ressource 500.
Dans FirstPackage.cs ou FirstPackage.vb, remplacez l'implémentation de l'interface d'IVsInstalledProduct à l'aide de le code suivant.
Public Function ProductDetails(ByRef pbstrProductDetails As String) As Integer Implements IVsInstalledProduct.ProductDetails pbstrProductDetails = "This is my package" Return Microsoft.VisualStudio.VSConstants.S_OK End Function Public Function IdBmpSplash(ByRef pIdBmp As UInteger) _ As Integer Implements IVsInstalledProduct.IdBmpSplash Return Microsoft.VisualStudio.VSConstants.S_OK End Function Public Function IdIcoLogoForAboutbox(ByRef pIdIco As UInteger) _ As Integer Implements IVsInstalledProduct.IdIcoLogoForAboutbox pIdIco = 600 Return Microsoft.VisualStudio.VSConstants.S_OK End Function Public Function OfficialName(ByRef pbstrName As String) _ As Integer Implements IVsInstalledProduct.OfficialName pbstrName = "My Package" Return Microsoft.VisualStudio.VSConstants.S_OK End Function Public Function ProductID(ByRef pbstrPID As String) _ As Integer Implements IVsInstalledProduct.ProductID pbstrPID = "My Package ID" Return Microsoft.VisualStudio.VSConstants.S_OK End Function
public int IdBmpSplash(out uint pIdBmp) { return Microsoft.VisualStudio.VSConstants.S_OK; } public int IdIcoLogoForAboutbox(out uint pIdIco) { pIdIco = 500; return Microsoft.VisualStudio.VSConstants.S_OK; } public int OfficialName(out string pbstrName) { pbstrName = "My Package"; return Microsoft.VisualStudio.VSConstants.S_OK; } public int ProductDetails(out string pbstrProductDetails) { pbstrProductDetails = "This is my package"; return Microsoft.VisualStudio.VSConstants.S_OK; } public int ProductID(out string pbstrPID) { pbstrPID = "My Package ID"; return Microsoft.VisualStudio.VSConstants.S_OK; }
La deuxième méthode retourne l'ID de ressource pour l'icône. Les trois fonctions restantes retournent le nom, les détails du produit, et l'ID de produit, afin qu'elles apparaissent dans la boîte de dialogue de À propos de .
Vous pouvez tester les modifications en exécutant la procédure suivante.
Pour tester l'écran de démarrage et sur la personnalisation de boîte de dialogue
Dans Explorateur de solutions, cliquez avec le bouton droit sur le premier nœud de projet, puis cliquez sur Propriétés. Le concepteur d'applications s'affiche.
Cliquez sur Débogage. Le volet d'options de débogage s'affiche.
dans la zone d' Arguments de la ligne de commande , ajoutez le commutateur de /splash .
appuyez sur F5 pour ouvrir Visual Studio dans la génération expérimentale.
Dans le menu d' Aide , cliquez sur Sur Microsoft Visual Studio.
la boîte de dialogue de À propos de apparaît et affiche l'icône et le texte pour votre VSPackage.
Quoi d'autre ?
Explorateur de solutions et Liste des tâches sont des exemples de fenêtres Outil. Dans Procédure pas - à - pas : créer une fenêtre Outil (partie de 4), vous pouvez créer une fenêtre Outil que les s'ancre dans Visual Studio et vous permet de lire des fichiers de musique.
Voir aussi
Concepts
Exemples d'extensibilité Visual Studio