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」を選択して作成します。
しばらく進み、次の画面ではMenu Commandを選択します。
最後にここでは
Command Nameは、「Auto Command」
Command ID は、「cmdidAutoBuild」
にしときます。
UIに部品を追加
以下の要領で追加していきます。
- <IDSymbol>追加する
- <Menu>を追加して、typeに追加したいUIを指定する
- <Group>を追加する
- <Button>の配置場所を記述する
この記事の場合は、ツールバーを追加します。
まさにここに記述されている通りです。
VSAutoBuild.vsct
を開きます。(vsctについてはここを参考にしてください。)
以下のように<IDSymbol>を追加します。
ここで定義したname
をvsct
ファイルのguid
やid
で利用します。
guidとidセットで一意になるので、利用するときも両方指定します。
<Symbols>
<GuidSymbol name="guidVSAutoBuildCmdSet" ...
<IDSymbol name="Toolbar" value="0x1000" />
<IDSymbol name="ToolbarGroup" value="0x1050" />
以下のように<Menu>を追加します。
ツールバーを表示したいのでtype
をToolbar
にします。
ちなみに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
として実装されています。
ここに自分の処理を追加していきます。
と言っても単純な処理で以下ですべてになります。
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」で検索します。
それをダウンロード・インストールして再起動します。
ツールバーを表示
ツールバーで右クリックして、Auto Buildを選択します。
Auto BuildをOn
アンインストール
Visual Studioで「ツール」 → 「機能拡張と更新プログラム」 → 「VSAutoBuild」でアンインストールできます。
保存
あとは普通に保存するたびにBuildされます。
ソース
このソースはgithubに置いてあります。参考にしてください。
https://github.com/ko2ic/VSAutoBuild