この記事では、最初の Visual Studio 拡張機能を起動して実行するための簡単な手順について説明します。 Visual Studio 拡張機能は、.NET Framework と C# を使用して記述されます。 既に .NET 開発者の場合、拡張機能の記述は他のほとんどの .NET プログラムやライブラリの記述に似ていることがわかります。
現在作成する拡張機能では、実行時にテキスト エディターに新しい guid を挿入するコマンドが追加されます。 これはシンプルで便利で、拡張機能開発のさまざまな側面を適切に紹介します。
ビジュアル学習者の場合は、このチュートリアルに従うユーザーのこの短いビデオをご覧ください。
最初の Visual Studio 拡張機能の作成を開始する前に (簡単です。約束します)、 必要なツールがあることを確認してください。
プロジェクトを作成する
いくつかのプロジェクト テンプレートから選択できるため、適切な選択を行います。 このコミュニティ ツールキットで使用されるテンプレートはすべて、名前にモニカー (Community) が含まれています。
VSIX Project w/Command (Community) テンプレートには、コマンドがフックされ、そこから簡単に開始できます。 これは、ほとんどの拡張機能にとって優れた出発点です。 ツール ウィンドウが必要な場合は、 VSIX Project w/Tool Window (Community) テンプレートを使用します。 また、ツール ウィンドウを開くコマンドもあります。
MEF のみの拡張機能やその他の高度なシナリオでは、 空の VSIX プロジェクト (コミュニティ) または VSIX プロジェクト (コミュニティ) テンプレートを使用します。
今回は、次のスクリーンショットに示すように、 VSIX Project w/Command (Community) テンプレートを選択します。
プロジェクト テンプレートを選択したら、プロジェクトに名前を付ける必要があります。 InsertGuid と呼びます。
[ 作成 ] ボタンをクリックすると、最終的に次のような基本的な VSIX プロジェクトが作成されます。
重要なファイル
最も重要なファイルを見てみましょう。
InsertGuidPackage.cs は Package クラスと呼ばれます。 その InitializeAsync(...) メソッドは、拡張機能を初期化するために Visual Studio によって呼び出されます。 ここからイベント リスナーを追加し、コマンド、ツール ウィンドウ、設定などを登録します。
source.extension.vsixmanifest は、拡張機能のマニフェスト ファイルです。 これには、タイトルや説明などのメタデータだけでなく、拡張機能に含まれるものに関する情報も含まれます。
VSCommandTable.vsct は XML ファイルであり、コマンドとキー バインドは宣言によって定義されるため、Visual Studio に登録できます。
Commands/MyCommand.cs は、 VSCommandTable.vsct ファイルで定義されているコマンドのコマンド ハンドラーです。 ボタンをクリックして、コマンドの実行時の動作を制御します。
コマンドの変更
まず、コマンドに Visual Studio メニュー システム内の適切な名前、アイコン、および位置があることを確認します。
VSCommandTable.vsct ファイルを開き、<Group>と<Button>を見つけます。 ボタンでグループが親として指定され、グループの親が組み込みの VSMainMenu/Tools メニューであることがわかります。
拡張機能の場合、[ GUID の挿入 ] コマンド ボタンを [編集] メイン メニューの下に配置し、グループを[編集] メニューに再配置します。 次のスニペットのように、[ ツール] を [編集] に置き換えます。
<Group guid="InsertGuid" id="MyMenuGroup" priority="0x0600">
<Parent guid="VSMainMenu" id="Edit"/>
</Group>
IntelliSense の完全な機能を得て、適切な場所を簡単に見つけられるようにします。
<Button>も更新する必要があります。
id要素の<Icon>属性を PasteAppend に更新することで、新しいアイコンを追加します。
<ButtonText>テキストを適切でわかりやすい名前で更新し、コマンドの技術名で<LocCanonicalName>を更新します。これは、[>] > キーボード ダイアログでコマンドにカスタム キーボード ショートカットを割り当てるときにユーザーに表示される名前です。
<Button guid="InsertGuid" id="MyCommand" priority="0x0100" type="Button">
<Parent guid="InsertGuid" id="MyMenuGroup" />
<Icon guid="ImageCatalogGuid" id="PasteAppend" />
<CommandFlag>IconIsMoniker</CommandFlag>
<Strings>
<ButtonText>Insert GUID</ButtonText>
<LocCanonicalName>.Edit.InsertGuid</LocCanonicalName>
</Strings>
</Button>
注
常にドット文字で <LocCanonicalName> を開始します。 これにより、他のテキストが自動的にプリペンドされず、ドットが表示されなくなります。
Visual Studio のイメージ ライブラリ内で使用できる何千ものアイコンを使用でき、IntelliSense に表示されるプレビューも取得できます。
これで、コマンドの名前、アイコン、および場所が更新されました。次は、テキスト エディターに guid を挿入するためのコードを記述します。
/Commands/MyCommand.cs ファイルを開き、実行時に新しい guid を挿入するように変更します。
using System;
using Community.VisualStudio.Toolkit;
using EnvDTE;
using Microsoft.VisualStudio.Shell;
using Task = System.Threading.Tasks.Task;
namespace InsertGuid
{
[Command(PackageIds.MyCommand)]
internal sealed class MyCommand : BaseCommand<MyCommand>
{
protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
{
await Package.JoinableTaskFactory.SwitchToMainThreadAsync();
DocumentView docView = await VS.Documents.GetActiveDocumentViewAsync();
if (docView?.TextView == null) return;
SnapshotPoint position = docView.TextView.Caret.Position.BufferPosition;
docView.TextBuffer?.Insert(position, Guid.NewGuid().ToString());
}
}
}
VS オブジェクトを使用してアクティブなエディター テキスト ビューを取得し、テキスト バッファーのキャレット位置に guid を挿入します。
VSは、Visual Studio IDE UI 要素へのアクセスを提供する静的オブジェクトです。VSIX Community Toolkit GitHub リポジトリのVS.csでその定義を参照してください。
注
このコミュニティ ツールキットの多くの場所で await JoinableTaskFactory.SwitchToMainThreadAsync() と ThreadHelper.ThrowIfNotOnUIThread() が表示されます。 スレッド切り替えのベストプラクティスに関しては、この時点で使用するタイミングや方法を理解する必要はありません。コンパイラの警告とコード修正(ライトバルブ形式)により、それを非常に簡単にすることができます。
拡張機能の最初のドラフトが完成し、テストします。
実行とデバッグ
拡張機能の実行は、他の .NET プロジェクトを実行するのと同じくらい簡単です。 デバッガーをアタッチして実行するには F5 キーを押し、実行しない場合は Ctrl + F5 キーを押します。
これにより、拡張機能がインストールされた Visual Studio の実験用インスタンスが開始されます。 Experimental Instance は通常のバージョンの Visual Studio ですが、個別の設定と拡張機能がインストールされています。 これは、物事を分離するのに役立ちます。
実験用インスタンスが起動すると、[編集] メイン メニューに [GUID の挿入] コマンドが表示されます。
テキスト ベースのファイルを開き、コマンドを実行して新しい guid を挿入します。 それです!
概要
これで、コマンド ボタンをメイン メニューに追加し、実行時にテキスト エディターと対話する最初の拡張機能が作成されました。
おめでとう!!
この拡張機能のコードは 、サンプル リポジトリにあります。