Visual Studioを機能拡張する - ライブラリとプロジェクトテンプレートの追加

一定水準以上のソフトウェア技術者なら、アプリを開発中、汎用的に使えそうなコードをライブラリー化したり、パターン化したプロジェクトを基にプロジェクトテンプレートを作って、作業を効率化しますね。

でも、作ったライブラリーを別のプロジェクトで使うとき、ライブラリをコピペしたり、ライブラリプロジェクトを追加したり、と結構めんどくさいですよね。場合によってはソースコードは見せたくなくてアセンブリーだけ、他人に提供したい…なんてケースもあると思います。プロジェクトテンプレートにしても、ZIPファイルをあぁだらこぅだらのフォルダーにコピーしてくださいとか、めんどくさい。

こんな場合は、VSIXパッケージ化して、Visual Studioに組み込んでしまいましょう。そうすれば、VSIXパッケージを実行するだけで、プロジェクトへの参照追加だけで共有ライブラリを参照可能にしたり、所定の場所にプロジェクトテンプレートがインストールされて新規作成で便利になります。

VSIX、某アイドルグループではありません。Visual Studio を拡張する為のパッケージの形式です。この形式にしておくと、Visual Studio ギャラリーを通じて

こんな感じで、公開して、Visual Studioの”ツール”→”拡張機能と更新プログラム”から選択してインストールするなんてことも出来てしまう。

では早速作り方を紹介していきますね。VSIXパッケージを作成するには、Visual StudioのUltimateエディションが必要です。Visual Studio Ultimateに対して、Visual Studio SDKをインストールします。上の図で示したダイアログで、左側で”オンライン”を選択し、右上の検索窓に”Visual Studio SDK”と入力して検索します。”Microsoft Visual Studio 2013 SDK”と表示される(過去のバージョンはそれぞれのバージョンに対応するSDKが出るはず)ので、それを選択し、”インストール”ボタンをクリックして実行してください。

Visual Studio SDK をインストールすると、Visual Studioで出来る事のおよそほとんどの事をプログラムで自動実行できるようになります。自動生成ツールを作ったり、開発環境の拡張が好きな人には堪らないですね~。

先ず、ライブラリをSDK化する方法を紹介します。上の図でBingのOptical Character RecognitionやMap、Translator Controlなどがリスト表示されていますが、これらはみんな、Bingサービスと連携するWindows Storeアプリで使えるUI部品とライブラリを含んでいます。こんな感じで皆さんのライブラリやUI部品が共有できたらクールじゃないっすか?で、ここでは、折角なのでWindows ストアアプリ向けのWindows Runtime Component ライブラリのSDK化を説明します。

先ず、Windows Runtime Componentを作ります。これは、プロジェクトの新規作成で、Visual Basic、C#、Visual C++のそれぞれのWindowsストアカテゴリに、”Windows ランタイムコンポーネント”というプロジェクトテンプレートがあるので、それを使って作ります。

ライブラリが出来たら、それをVSIXパッケージ化します。下の図の”VSIX Project”テンプレート(Visual C#→拡張機能)を使って新規にプロジェクトを一個作成します。

出来上がったプロジェクトに下の図の様に、フォルダーを作成します。redist/commonconfiguration/neutral、references/commonconfiguration/neutralの2フォルダー(というか実際に作るフォルダーは6フォルダーですが)。

作成した二つのフォルダーに、Windows Runtime Componentライブラリプロジェクトをビルド後bin/Releaseフォルダに出来上がっている拡張子priとwinmdの二つのファイルをコピーします。コピーしたファイルは、プロジェクトに”既存の項目”で追加し、プロパティで、”ビルドアクション”の値を”コンテンツ”に変更します。

プロジェクトにSDKManifest.xml という名前のXMLファイルを新しく作成します。ファイルの中身は、

<?xml version="1.0" encoding="utf-8" ?>
<FileList
  DisplayName="SDKの表示名"
  MinVSVersion="11.0"
  TargetFramework=".NETCore,version=v4.5"
  AppliesTo="WindowsAppContainer"
  SupportsMultipleVersions="Error"
  MoreInfo="適当なURL">
</FileList>

と、書いておきます。そして、source.extension.vsixmanifest を開き、Author、Description などを適宜書き換えます。Install Targetsタブを選択し、

  • ”Type of install:"を”Extention SDK”
  • ”Target Platform Identifier:"を”Windows”
  • ”Target Platform Version:"を”v8.1"

に選択します。”Assets”タブを選択し、”New”ボタンをクリック、表示されたダイアログで、”Micrsoft.Extension”を選択、”Source”で”File on filesystem"を選択し、”Path”に”SDKManifest.xml”と入力します。

はい、これでOK。このプロジェクトをビルドすると、”VSIX”という拡張子のついたファイルが、binフォルダーの下のRelease/Debugフォルダーに出来上がります。このファイルをクリックして実行すれば、ライブラリはVisual Studioに組み込まれます。

次にプロジェクトテンプレートです。プロジェクトテンプレートの作り方は、基本、作りたいプロジェクトを開いて、”ファイル”→”テンプレートのエクスポート”を選択し、出来上がったZIPファイルを必要に応じて少々整えればすぐ出来上がります。プロジェクトテンプレートを組み込むVSIXプロジェクトも、先ほど紹介したVSIX Projectテンプレートで新しくプロジェクトを作ります。こちらも、AuthorやDescripitonなど、適宜書き込んで、”Install Targets"タブを選択し、”Type of Install:"を”Visual Studio Extension”に設定します。

そして、”New”ボタンをクリックし、適用可能なVSのバージョンを選択します。Express系を選択すれば無償版向けのSDKが作れるし、それ以外でProやPremiumなどを選択すれば、有償版VS縛りも可能です。

次に”Assets”タブを選択します。”New”ボタンをクリックして、”Type”を”Microsoft.VisualStudio.ProjectTemplate”に設定し、”Source:"で”File on filesystem"を選択し、作成していあるプロジェクトテンプレートZIPファイルを選択します。

はい、これでお仕舞。後は出来上がったVSIXファイルを実行するだけ。残念ながらこれだと、ストアアプリのテンプレートが例えばC#→Windows ストアカテゴリの下には入らないのですが、C#のプロジェクトテンプレートなら、新規プロジェクトの作成ダイアログで、C#カテゴリの直下に表示されるようになります。

ってことで、「かっこいいUI部品作ったんだよね」、とか、「ネットワークサービスを使うのに便利なライブラリ作ったよ」、とか、「周辺機器を制御するを支援するライブラリ作ったぜ」って方、是非、この方法で、VSIXパッケージ化して、公開しましょう!!