月別アーカイブ: 2014年1月

VisualStudio2013の拡張機能を作る2

前回はウィザードに従うだけでしたが、とりあえずコマンドが一つ追加される拡張機能ができました。

コマンドの中身はコールバックメッソッドを弄れば好きに変更できます。古式ゆかしく、”Hello, World.” してみましょう。といってもウィザードで自動生成されたコードがメッセージボックスを表示する様になっているので出力されるテキストを書き換えるだけですが。

ウィザードが生成したコードでは「MenuItemCallback」というメッソド名になっています。
2014-01-15_193751

MenuItemCallbackの中身、表示されるメッセージを変更して。

private void MenuItemCallback(object sender, EventArgs e)
{
    IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));
    Guid clsid = Guid.Empty;
    int result;
    Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(
               0,
               ref clsid,
               "VSPackage1",
               "Hello, World.",
               string.Empty,
               0,
               OLEMSGBUTTON.OLEMSGBUTTON_OK,
               OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
               OLEMSGICON.OLEMSGICON_INFO,
               0,        // false
               out result));
}

デバッグ実行。ツールメニューから「My Command name」をクリック。
2014-01-15_194206

2014-01-15_194223

メッセージボックスのテキストを書き換えただけでは寂しいので、エディタの現在行に出力してみます。

private void MenuItemCallback(object sender, EventArgs e)
{
    var dte = GetService(typeof(Microsoft.VisualStudio.Shell.Interop.SDTE)) as EnvDTE80.DTE2;
    var selection = dte.ActiveDocument.Selection as EnvDTE.TextSelection;
    selection.Insert("Hello, World.");
}
 

デバッグ実行して、適当なファイルを開き、コマンドを実行。
2014-01-15_195342

無事Hello, World.されました。
2014-01-15_195345

次はコマンドを増やしていきたいと思います。

VisualStudio2013の拡張機能を作る

社内の開発環境をVS2010からVS2013に乗り替えようかという話になりまして、そこで困ったのがマクロです。
VisualStudioのマクロ機能はVS2012から削除されているんですね。

数は多くないのですが、社内コーディングルールに合わせた入力補助機能をマクロで実現していたので使えなくなると少しばかり不便です。

そこで拡張機能を作成することにしました。

Visual Studio SDK をインストールする

拡張機能を作成するにはVSで新しいプロジェクトの作成で「その他のプロジェクトの種類」→「拡張機能」から「Visual Studio Package」を指定しますが、初期状態ではこのテンプレートが表示されません。

MicrosoftからVisual Studio SDKをダウンロードしてインストールする必要があります。
http://www.microsoft.com/en-us/download/details.aspx?id=40758

インストールが完了するとプロジェクトテンプレートにこんな感じで追加されます。

2014-01-14_185932

ウィザードにしたがって拡張機能プロジェクトを作成する

新しいプロジェクトとして「Visual Studio Package」を選択すると、ウィザードが開始します。

適当にNext。
2014-01-14_190318

開発言語を選択します。初期状態ではC++が選択されていますが今回はC#を選択。2014-01-14_190342

会社名や説明といった基本情報を入力。今回はそのままで。
2014-01-14_190354

機能の選択。「Menu Command」にチェックすると、メニュー「ツール」に項目が追加されます。「Tool Window」にチェックをつけるとメニュー「表示」→「その他のウィンドウ」に項目が追加されます。「Custom Editor」にチェックをつけると、ファイル新規作成時の「インストール済」項目にオリジナルの項目が追加されます。「Custom Editor」については詳しく調べていないので使いどころが分かっていません。
2014-01-14_190408

「ツール」に追加される名称とIDを指定。
2014-01-14_190416

「その他のウィンドウ」に追加される名称とIDを指定。
2014-01-14_190421

テストプロジェクトを追加するかを指定して、Finish。
2014-01-14_190450

ウィザードが終わると、こんな感じです。画像は「その他のウィンドウ」から表示されるツールウィンドウのデザイン画面です。XAML。
2014-01-14_191328

何も考えずにデバッグ実行。別のVSが立ち上がるので「ツール」メニューを確認するとウィザードの「Command Option」で指定した項目が追加されています。なぜかデフォルトのアイコンが「x1」なんですよね。
2014-01-14_191601

追加された項目をクリックするとメッセージボックスが表示されます。

今回のプロジェクトではVSPackage1Package.cs の MenuItemCallback() を変えればお好みのコマンドを実行できるわけですね。

こんな感じで開発にC#も使えるし、拡張機能の開発は意外と簡単。と思っていたのですが、ここからが…

以下次回。

201401140436000

今までは、ストーブを使ってましたが、灯油の値段が高いため

石油ファンヒータにしてみました。

家計の節約につながるか、結果は、春ごろに出ます。

201401140435000

遅くなりましたが、今年も大宰府に初詣に行ってきました。

人の多い日を避けて行ったつもりですが、まだまだ凄い人の数でした。

渋滞にも見舞われ到着が遅かったため、ゆっくりする間も参拝を済ませ帰りました。

しかし梅が枝餅は、ちゃっかり買って帰りましたよ。

謹賀新年

お健やかに新春をお迎えのことと存じます。
旧年中はたいへんお世話になり誠にありがとうございました。
本年が幸多き年となりますようお祈り申し上げます。

PS.
ちなみに 「あけましておめでとうございます。」は正しくて、「新年、あけましておめでとうございます。」は間違っているらしい。 「新年」と「明けまして」は同じ意味になるのだそうです。