Créer votre première extension de Visual Studio

Ce document est un guide de démarrage rapide qui montre comment créer votre première extension à l’aide de VisualStudio.Extensibility. L’extension s’exécute hors processus, ce qui signifie en dehors du processus de Visual Studio.

Prerequisites

  • Visual Studio 2022 version 17.9 Preview 1 ou version ultérieure avec la charge de travail Visual Studio extension development.

Créer le projet d’extension

  • Utilisez le modèle VisualStudio.Extensibility Project pour créer un projet d’extensibilité.

Capture d’écran du modèle VSExtensibility.

À ce stade, vous êtes prêt à commencer à étendre Visual Studio en ajoutant des commandes et des composants d'éditeur à votre extension.

La classe Extension

Le modèle crée une classe qui s’étend Extension. Cette classe est la première à être instanciée lorsque votre extension est chargée. Dans la méthode InitializeServices, vous pouvez ajouter vos propres services à la collection de services pour les rendre disponibles via l’injection de dépendances.

[VisualStudioContribution]
internal class ExtensionEntrypoint : Extension
{
    protected override void InitializeServices(IServiceCollection serviceCollection)
    {
        base.InitializeServices(serviceCollection);

        // You can configure dependency injection here by adding services to the serviceCollection.
    }
}

Vous pouvez également voir l’attribut VisualStudioContribution utilisé pour marquer les composants d’extension destinés à être consommés par Visual Studio. Cet attribut peut être appliqué aux classes implémentant IVisualStudioContributionClass ou aux propriétés statiques d’un type implémentant IVisualStudioContributionProperty.

Ajouter votre première commande

Le modèle crée Command1.cs en tant que premier gestionnaire de commandes, que vous pouvez utiliser comme point de départ. Étant donné que nous voulons prendre Visual Studio connaissance de cette commande et que la classe Command implémente IVisualStudioContributionClass, la commande est marquée avec l’attribut VisualStudioContribution.

[VisualStudioContribution]
internal class Command1 : Command
{

La commande a une propriété de configuration nommée CommandConfiguration, qui définit son nom d’affichage, son icône et son positionnement sous le Extensions menu.

    public override CommandConfiguration CommandConfiguration => new("%MyExtension.Command1.DisplayName%")
    {
        // Use this object initializer to set optional parameters for the command. The required parameter,
        // displayName, is set above. DisplayName is localized and references an entry in .vsextension\string-resources.json.
        Icon = new(ImageMoniker.KnownValues.Extension, IconSettings.IconAndText),
        Placements = new[] { CommandPlacement.KnownPlacements.ExtensionsMenu },
    };

Les propriétés de configuration sont évaluées par le compilateur C# lors de la génération de l’extension et leurs valeurs sont enregistrées en tant que métadonnées d’extension afin que Visual Studio puissent la lire sans charger l’assembly d’extension. Pour cette raison, les propriétés de configuration ont des restrictions supplémentaires par rapport aux propriétés normales (par exemple, elles doivent être lues en lecture seule).

Vous pouvez voir que le nom d’affichage de la commande est "%MyExtension.Command1.DisplayName%", qui fait référence à la chaîne MyExtension.Command1.DisplayName dans le fichier .vsextension/string-resources.json, ce qui permet de localiser cette chaîne.

Lorsque la commande est exécutée, Visual Studio appelle la méthode ExecuteCommandAsync où vous pouvez placer un point d’arrêt. Vous pouvez utiliser context argument ou objet this.Extensibility pour interagir avec Visual Studio.

Par exemple, un gestionnaire de commandes peut être le suivant :

public override async Task ExecuteCommandAsync(IClientContext context, CancellationToken cancellationToken)
{
    await context.ShowPromptAsync(
        "Hello from an extension!", 
        PromptOptions.OK, 
        cancellationToken);
}

Pour plus d’informations sur l’ajout de commandes, reportez-vous à la section Commandes .

Déboguer votre extension

  1. Vérifiez que votre projet d’extension est sélectionné comme projet de démarrage dans Visual Studio, puis appuyez sur F5 pour démarrer le débogage.

  2. Appuyez sur F5 génère votre extension et déployez-la sur l'instance expérimentale de Visual Studio version que vous utilisez. Le débogueur devrait se connecter dès que votre extension est chargée.

  3. Vous trouverez la nouvelle commande dans Extensions le menu, comme illustré dans l’image suivante :

    Screenshot montrant l’exemple de commande dans Visual Studio.

    Capture d’écran montrant l’exemple de commande.

Étapes suivantes

Si vous n’avez pas consulté les pages d’introduction, consultez Bienvenue dans la documentation VisualStudio.Extensibility.

Créez maintenant une extension légèrement plus intéressante ; consultez Créer une extension simple.