共用方式為


建立您的第一個 Visual Studio 擴充功能

本文件是說明如何使用 VisualStudio.Extensibility 建立第一個擴充功能的快速入門。 擴充功能執行跨處理序,意味著在 Visual Studio 處理序之外。

必要條件

  • 具有 Visual Studio extension development 工作負載的 Visual Studio 2022 17.9 版 Preview 1 或更高版本。

建立延伸模組專案

  • 使用 VisualStudio.Extensibility Project 範本來建立新的擴充性專案。

Screenshot of the VSExtensibility template.

此時,您已準備好透過向擴充功能新增命令和編輯器元件來開始擴充 Visual Studio。

[擴充功能] 類別

此範本會建立擴充 Extension 的類別。 此類別是載入擴充功能時所具現化的第一個類別。 在 InitializeServices 方法中,您可以將自己的服務新增至服務集合,使其可供相依性插入使用。

[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.
    }
}

您也可以查看用來標記 Visual Studio 所要取用的擴充功能元件的 VisualStudioContribution 屬性。 這個屬性可以套用至實作 IVisualStudioContributionClass 的類別,或類型實作 IVisualStudioContributionProperty 的靜態屬性。

新增您的第一個命令

此範本建立 Command1.cs 作為您的第一個命令處理常式,您可以將其用作起點。 由於我們想要讓 Visual Studio 知道此命令,而 Command 類別會實作 IVisualStudioContributionClass,因此命令會以 VisualStudioContribution 屬性標示。

[VisualStudioContribution]
internal class Command1 : Command
{

此命令具有名為 CommandConfiguration 的組態屬性,該屬性會定義其顯示名稱、圖示和 Extensions 功能表下的位置。

    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 },
    };

建置擴充功能時,C# 編譯器會評估組態屬性,並將其值儲存為擴充功能中繼資料,讓 Visual Studio 可以進行讀取而不需載入擴充功能組件。 因此,相較於一般屬性,組態屬性具有額外的限制 (例如,必須是唯讀的)。

您可以看到命令的顯示名稱是 "%MyExtension.Command1.DisplayName%",它會參考 .vsextension/string-resources.json 檔案中的 MyExtension.Command1.DisplayName 字串,允許當地語系化此字串。

執行命令時,Visual Studio 會呼叫 ExecuteCommandAsync 方法 ,您可以在其中放置中斷點。 您可以使用 context 引數或 this.Extensibility 物件與 Visual Studio 互動。

例如,命令處理常式可能如下所示:

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

如需如何新增命令的詳細資訊,請參閱命令一 節。

偵錯您的擴充功能

  1. 請確定您的擴充功能專案已選取為 Visual Studio 中的啟動專案,然後按 F5 以開始偵錯。

  2. F5 組建您的擴充功能,並將其部署至您所使用的 Visual Studio 版本實驗執行個體。 載入擴充功能之後,偵錯工具應該附加。

  3. 您可以在 Extensions 功能表中找到新的指令,如下圖所示:

    Screenshot showing sample command.

下一步

如果您錯過了簡介概觀,請參閱歡迎使用 VisualStudio.Extensibility 文件

現在建立稍微有趣的擴充功能;請參閱建立簡單的擴充功能