Project Linker を使用して複数のプロジェクトでソースコードを共有する
拡張アドインについて
まず操作手順説明の前にアドインについて注意があります。
今回は Visual Studio 2012 の拡張アドイン「Project Linker 2012」というものを使用していますが、これとほぼ同じ機能を持つ「Project Linker」というものもあります。同じ機能なのですが製作者が違うという点と「Project Linker」は Visual Studio 2010 でしか正常に動作しません。今回は Visual Studio 2012 での説明になりますので使用するアドインは「Project Linker 2012」になります。
逆に Visual Studio 2010 を使用しているのであれば「Project Linker」の方を入れても構いません。今回説明する内容とほぼ同じ方法で設定できると思います。
複数プロジェクト間でのソースコードの共有について
複数プロジェクト間でのソースコードの共有自体については Visual Studio に標準で搭載されています。ソースファイルは基本的にプロジェクトファイルのあるフォルダ以下の配置する必要があるため、例えばプロジェクトAのソースファイルをプロジェクトBにドラッグするとファイルのコピーになってしまいコードの二重管理になってしまいます。
ではまず、Visual Studio でのソースコードの共有機能について説明します。どういったものかというと簡単に言えばソースファイルのリンク(ショートカット)を作るイメージになります。コードのリンクを作成するには以下の手順で行います。
ここでは Application1 と Application2 というプロジェクトを作成しており、ソースファイルの実体は Application1 が持ち、Application2 はそのソースファイルを参照するという形にしています。下の図では「ProfileLoader.cs」ファイルを Application1 に持っているのでこれを Application2 のプロジェクトが参照するようにします。
Application2 プロジェクトを右クリックし「追加」-「既存の項目」を選択します。
ファイル選択ダイアログが表示されるので、参照元である「Application1」のフォルダの中にある「ProfileLoader.cs」ファイルを選択し、右下の「追加ボタンの右にある▼」ボタンをクリックし、「リンクとして追加」を選択します。
Application2 のプロジェクトに「ProfileLoader.cs」ファイルが追加されます。あくまでも Apllication1 の ProfileLoader.cs ファイルへのリンクであり、コピーではありません。ファイルのアイコンの右下に四角と矢印のアイコンが追加されていることがわかります。
この状態で Application2 の ProfileLoader.cs ファイルを開いて編集しても、Application1 の ProfileLoader.cs ファイルを編集していることになります。
参照したファイルはもちろん、普通にソースファイルを入れた時と同じようにしています。名前空間は Application1 のままなので、下図のように名前空間を指定すれば通常どおりクラスを使用できます。
Project Linker を使用してソースコードの共有を自動化する
ソースファイルを共有するプロジェクトが2つだけの場合や、共有するファイルが数個程度というのであれば、前述のとおり手動でも問題ありませんが、プロジェクトやファイルがより多い場合は手動ではかなり手間になってしまいます。上記操作で一度に共有できるファイルの数は1フォルダ単位なのでフォルダを階層化しているとそれだけ同じ手順を踏まなければなりません。また、フォルダの階層を変えたりする場合も、すべてのプロジェクトで再設定しなければいけません。
次に紹介するVisual Studio の拡張機能「Project Linker」を使用するとこれらの操作を自動化できます。拡張機能は Visual Studio の Edition が Professional 以上でないと使用できませんので注意してください。
以下の URL からダウンロードします。
ファイルをダウンロードしたらダブルクリックして起動します。インストーラー形式になっています。インストールする前にすべての Visual Studio を閉じてください。
インストール対象の Visual Studio にチェックが入っていることを確認し「インストール」ボタンをクリックします。
正常にインストールされたら閉じてください。
インストールが終わったら、複数のプロジェクトを持つソリューションファイルを開きます。ここではプロジェクト「Application1」がソースファイルの実体を持ち、「Application2」がその参照を持つこととします。
参照するほうのプロジェクトを右クリックし「Add project link」を選択します。
ダイアログが開くので参照元である「Applicarion1」のプロジェクトを選択します。タイトルに「Select Source Project」と書いてある通り、ソースファイルの実体を持っているプロジェクトを選択します。選択したら OK ボタンをクリックします。
「Link all items by default」にチェックが入ってると「OK」ボタンを押した時点で、Application1 のファイル、フォルダ構成が Application2 に同期されるので、いきなり同期させたくない場合はチェックを外しておいてください。逆に一括で同期させたい場合はチェックしていると便利です。
リンクが成功したら「OK」ボタンをクリックします。
Application2 は Application1 にリンクされているので、試しに Apllication1 にクラスを追加してみましょう。プロジェクトのリンクを作成したら操作は基本的に参照元である「Application1」の方で行います。
プロジェクトを右クリックして「追加」-「新しい項目」を選択します。
クラスを追加します。クラスは必要なものを追加して構いません。ここでは文字列編集を補助する「StringHelper」というクラスを作成しています。
ソースファイルを追加すると自動的に Application2 のプロジェクトにファイルのリンクが作成されます。
フォルダを作成してみます。
フォルダも自動的に作成されます。ちなみにフォルダにはリンクの概念はないため、作成されるのは物理フォルダです。
ファイルを先ほど作成したフォルダの中に移動させると、こちらも同じようにリンク先の方も自動的に移動されます。
フォルダとその中にあるファイルを削除してみます。
こちらも同じようにリンク先も削除されます。このように Project Linker を使用するとファイルやフォルダ構成を複数のプロジェクト間で同期させることができます。
リンクさせているプロジェクトが複数になった時、現在どのような状態になっているかを確認することができます。メニューの「プロジェクト」から「Edit project links」を選択します。
ここではリンクの一覧の確認とリンクの解除が行えます。リンクの解除をする場合は、対象のリンクを一覧から選択して「Unlink」ボタンをクリックします。