Visual Studio の拡張機能を初めて作成する
このドキュメントは、VisualStudio.Extensibility を使用して最初の拡張機能を作成する方法を示すクイック スタートです。 拡張機能はプロセス外で実行されます。つまり、Visual Studio プロセスの外部で実行されます。
前提条件
- Visual Studio 2022 バージョン 17.9 Preview 1 以降 (ワークロードあり
Visual Studio extension development
)。
拡張プロジェクトを作成する
- テンプレートを使用して
VisualStudio.Extensibility 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
呼び出します。 引数またはthis.Extensibility
オブジェクトを使用context
して 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 ドキュメントへようこそを参照してください。
ここで、もう少し興味深い拡張機能を作成します。「単純な拡張機能を作成する」を参照してください。