コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Visual Studio 拡張機能作成】Visual Studio 2017 でメニューにコマンドを追加する拡張機能を作成する方法

はじめに

この記事では Visual Studio 2017 で
メニューにコマンドを追加する拡張機能を作成する方法を紹介していきます

検証環境

  • Visual Studio Community 2017

手順

プロジェクトの準備

f:id:baba_s:20171206145706p:plain

Visual Studio メニューの「ファイル>新規作成>プロジェクト」を選択します

f:id:baba_s:20171206145714p:plain

左メニューで「Visual C#>Extensibility」を選択して
リストから「VSIX Project」を選択して
名前や保存場所を適当に設定して「OK」ボタンを押します

f:id:baba_s:20171206145726p:plain

プロジェクトを作成したら「ソリューションエクスプローラー」で
プロジェクトを右クリックして「追加>新しい項目」を選択します

f:id:baba_s:20171206145735p:plain

左メニューで「Visual C# アイテム>Extensibility」を選択して
リストから「Custom Command」を選択して
ファイル名を適当に設定して「OK」ボタンを押します

これでメニューにコマンドを追加する拡張機能を作成する準備が完了です

コマンドの実装

作成した「Command1.cs」ファイルの88行目あたりを見ると
下記のような処理が記述されています

private void MenuItemCallback(object sender, EventArgs e)
{
    string message = string.Format( CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.GetType().FullName );
    string title = "Command1";

    // Show a message box to prove we were here
    VsShellUtilities.ShowMessageBox(
        this.ServiceProvider,
        message,
        title,
        OLEMSGICON.OLEMSGICON_INFO,
        OLEMSGBUTTON.OLEMSGBUTTON_OK,
        OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST );
}

「Command1.cs」ファイルの作成直後は
コマンドが選択されたらメッセージボックスを表示する処理が記述されています
本来はこの関数の中を変更してコマンドを実装していきます
今回はこのまま説明を続けます

コマンドの表示場所と表示名

「Command1Package.vsct」ファイルの40行目あたりに
下記のようなコードが記述されています

<Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>

ここで、作成したコマンドを Visual Studio のどのメニューに追加するかを設定できます
最初は「IDM_VS_MENU_TOOLS」が記載されており、
これは、Visual Studio の「ツール」メニューにコマンドを追加することを表しています
ここに記載できる識別子は下記のページにまとめられています

https://msdn.microsoft.com/ja-jp/library/cc826118.aspx

また、59行目あたりには下記のようなコードが記述されています

<ButtonText>Invoke Command1</ButtonText>

これは、作成したコマンドの表示名になっており、
現在は「Invoke Command1」と表示されるようになっています

今回はコマンドの表示場所も表示名もデフォルトのままで説明を続けます

拡張機能のビルドとデバッグ

f:id:baba_s:20171206151132p:plain

Visual Studio ツールバーの「開始」を選択します
すると、デバッグ用の Visual Studio が起動します

f:id:baba_s:20171206151255p:plain

そして、Visual Studio メニューの「ツール」を選択すると
「Invoke Command1」という名前で項目が追加されており、これを選択すると

f:id:baba_s:20171206151359p:plain

メッセージボックスが表示されることが確認できます

これで、メニューにコマンドを追加する拡張機能を作成する準備ができたので
あとは、「Command1.cs」ファイルでコマンドが押されたときの処理を自作したり、
「Command1Package.vsct」ファイルで、コマンドの表示場所や表示名を変更したりして
拡張機能を実装していきます

作成した拡張機能

f:id:baba_s:20171206152033p:plain

作成した拡張機能は「【作成したプロジェクトの保存場所】\bin\Debug」フォルダ内に
.vsix という拡張子で保存されます

f:id:baba_s:20171206152111p:plain

このファイルをダブルクリックすると「VSIX インストーラー」が起動して
作成した拡張機能を Visual Studio に反映することができます

参考サイト様