LoginSignup
54

More than 5 years have passed since last update.

VisualStudioのPlugin作成は意外と簡単(だったので作ってみた)

Posted at

VisualStudio2013のPluginの作成方法です。
以前はマクロやアドインで作成していたみたいですが、いまはVSPackageで作るみたいです。

この記事では、エディタ保存時にBuildを走らせるPluginを作ります。
常に動くと邪魔くさいのでツールバーでOn,Offできるようにします。

どういうときに使うPluginかというと、StyleCopの警告を削除するときに使ったりすると便利かなと思っています。

作り方

準備

Visual Studio SDKをインストールしてください。
http://www.microsoft.com/en-us/download/details.aspx?id=40758

プロジェクト作成

新しいプロジェクト → 「テンプレート」「C#」「機能拡張」で「Visual Studio Package」を選択して作成します。
vspackage.png

しばらく進み、次の画面ではMenu Commandを選択します。
menucommand.png

最後にここでは
Command Nameは、「Auto Command」
Command ID は、「cmdidAutoBuild」
にしときます。

UIに部品を追加

以下の要領で追加していきます。

  1. <IDSymbol>追加する
  2. <Menu>を追加して、typeに追加したいUIを指定する
  3. <Group>を追加する
  4. <Button>の配置場所を記述する

この記事の場合は、ツールバーを追加します。

まさにここに記述されている通りです。

VSAutoBuild.vsct を開きます。(vsctについてはここを参考にしてください。)

以下のように<IDSymbol>を追加します。
ここで定義したnamevsct ファイルのguidid で利用します。
guidとidセットで一意になるので、利用するときも両方指定します。

<Symbols>
  <GuidSymbol name="guidVSAutoBuildCmdSet" ...
    <IDSymbol name="Toolbar" value="0x1000" />
    <IDSymbol name="ToolbarGroup" value="0x1050" />

以下のように<Menu>を追加します。
ツールバーを表示したいのでtypeToolbarにします。
ちなみにtype に指定するものは、Menu,Context,Button,Toolbar です。

<CommandFlag>についての詳細はここを参考にしてください。

<Menus>
  <Menu guid="guidVSAutoBuildCmdSet" id="Toolbar" type="Toolbar" >
    <CommandFlag>DefaultDocked</CommandFlag>
    <Strings>
      <ButtonText>Auto Build</ButtonText>
      <CommandName>Auto Build</CommandName>
    </Strings>
  </Menu>    
</Menus>

以下のように<Group>を追加します。

<Group guid="guidVSAutoBuildCmdSet" id="ToolbarGroup" priority="0x0000">
  <Parent guid="guidVSAutoBuildCmdSet" id="Toolbar"/>
</Group>

<Button>の<Parent>のidをToolbarGroup に変更します。
今回のツールバーではアイコンなしでテキストだけにしたいので、TextOnly にします。

<CommandFlag>についての詳細はここを参考にしてください。

<Button guid="guidVSAutoBuildCmdSet" id="cmdidAutoBuild" priority="0x0100" type="Button">
  <Parent guid="guidVSAutoBuildCmdSet" id="ToolbarGroup" />
  <CommandFlag>TextOnly</CommandFlag>
  <Strings>
    <ButtonText>AutoBuild</ButtonText>
  </Strings>
</Button>

ちなみにtypeが例えば、Menu のときにこの<Button>の<Parent>で配置場所を決められます。

例えば、以下のようにするとメニューの「ツール」の中に自作のメニューが表示されます。

<Group guid="guidVSAutoBuildCmdSet" id="MyMenuGroup" priority="0x0600">
  <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/>
</Group>

<Button guid="guidVSAutoBuildCmdSet" id="cmdidAutoBuild" priority="0x0100" type="Button">
  <Parent guid="guidVSAutoBuildCmdSet" id="MyMenuGroup" />

上記のIDM_VS_MENU_TOOLS は、VisualStudioのメニューのIDになります。
その他のIDについては、ここを参照してください。

ここまで実装すると、Debugモードで動作させて「実験用のインスタンス」でツールバーに表示されます。

詳しくは、この記事の下部にある「使い方」に記述していますが、簡単に書くと以下の手順です。

  • ツールバーのところで右クリック
  • AutoBuildがあるので選択
  • するとツールバーにAutoBuild表示される

自動ビルド実装

デフォルトの実装で、Initialize() メソッドにAutoBuildツールバーが押下されたときのCallBackがMenuItemCallback として実装されています。

ここに自分の処理を追加していきます。
と言っても単純な処理で以下ですべてになります。

VSAutoBuildPackage.cs
private DocumentEvents _documentEvents;

private void MenuItemCallback(object sender, EventArgs e)
{
    var myCommand = sender as OleMenuCommand;
    if (null != myCommand)
    {
        myCommand.Checked = !myCommand.Checked;
    }

    DTE2 dte = (DTE2)GetService(typeof(DTE));
    _documentEvents = dte.Events.DocumentEvents;
    if (myCommand.Checked)
    {
        _documentEvents.DocumentSaved += DocumentEvents_DocumentSaved;
    }
    else
    {
        _documentEvents.DocumentSaved -= DocumentEvents_DocumentSaved;
    }
}

private void DocumentEvents_DocumentSaved(Document document)
{
    document.DTE.ExecuteCommand("Build.BuildSelection", "");
}

ツールバーがチェック状態のときにドキュメントを保存したら動作するイベント(DocumentEvents_DocumentSaved )を登録し、オフ状態であればイベントを削除しています。

document.DTE.ExecuteCommand で動作させています。

使い方

インストール

VisualStudioギャラリーで公開されています。
Visual Studioで「ツール」 → 「機能拡張と更新プログラム」 → 「オンライン」で「VSAutoBuild」で検索します。
それをダウンロード・インストールして再起動します。
install.png

ツールバーを表示

ツールバーで右クリックして、Auto Buildを選択します。
toolbar.png

Auto BuildをOn

ツールバーのAuto BuildをOnにする
toolbaron.png

アンインストール

Visual Studioで「ツール」 → 「機能拡張と更新プログラム」 → 「VSAutoBuild」でアンインストールできます。

保存

あとは普通に保存するたびにBuildされます。

ソース

このソースはgithubに置いてあります。参考にしてください。
https://github.com/ko2ic/VSAutoBuild

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54