このドキュメントは、VisualStudio.Extensibility を使用して最初の拡張機能を作成する方法を示すクイック スタートです。 拡張機能はアウトプロセスで実行されます。つまり、Visual Studio プロセスの外部を意味します。
前提条件
-
Visual Studio extension developmentワークロードを含む Visual Studio 2022 バージョン 17.9 Preview 1 以降のバージョン
拡張プロジェクトを作成する
-
VisualStudio.Extensibility Projectテンプレートを使用して、新しい機能拡張projectを作成します。
この時点で、拡張機能にコマンドとエディター コンポーネントを追加して、Visual Studioの拡張を開始する準備ができました。
Extension クラス
テンプレートは、 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%"され、MyExtension.Command1.DisplayName ファイル内の.vsextension/string-resources.json文字列を参照し、この文字列をローカライズできることがわかります。
コマンドが実行されると、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);
}
コマンドを追加する方法の詳細については、「 コマンド 」セクションを参照してください。
拡張機能をデバッグする
Visual Studioで拡張機能プロジェクトがスタートアップ プロジェクトとして選択されていることを確認し、
F5キーを押してデバッグを開始します。F5キーを押すと、拡張機能がビルドされ、使用している Visual Studio のバージョンの実験用インスタンスにデプロイされます。 拡張機能が読み込まれると、デバッガーがアタッチされます。次の図に示すように、
Extensionsメニューに新しいコマンドがあります。
次のステップ
概要を見逃した場合は、 VisualStudio.Extensibility ドキュメントへようこそを参照してください。
ここで、もう少し興味深い拡張機能を作成します。 「単純な拡張機能を作成する」を参照してください。