Project Linker を使用して複数のプロジェクトでソースコードを共有する

概要

通常複数のプロジェクト間で同一の機能を使用する場合はクラスライブラリを作成したり、バッチファイルを作成したりしますが、場合によってはソースファイルを直接複数のプロジェクトで共有したい場合があると思います。

ソースファイルは基本的にプロジェクトごとのフォルダ以下に配置しなければならず、ファイルを物理的に共有することができません。シンボリックリンクフォルダを使う方法もありますが、完全な物理フォルダではないため、弊害が発生する可能性もあります。また、同じフォルダに複数のプロジェクトを配置する方法もありますが、こちらも意外とファイル管理が面倒で、誤操作の可能性もあるためおすすめしません。

Visual Studio では複数のプロジェクトでソースコードを共有できる機能がありますが、ファイルごとに手動で行わなければならず、フォルダ構成が変わった場合に毎回手作業で再共有しなければなりません。

ここでは「Project Linker」を使用してソースコード、またその他ファイルの共有設定を自動化させる方法について説明します。

動作環境

Visual Studio
  • Visual Studio 2012 Professional
  • Visual Studio 2012 Premium
  • Visual Studio 2012 Ultimate
Project Linker Project Linker 2012

動作確認環境

Visual Studio Visual Studio 2012 Professional
Project Linker Project Linker 2012

内容

拡張アドインについて

まず操作手順説明の前にアドインについて注意があります。

今回は 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 のプロジェクトが参照するようにします。

Application1 が ProfileLoader.cs ファイルを持つ

Application2 プロジェクトを右クリックし「追加」-「既存の項目」を選択します。

既存の項目を追加

ファイル選択ダイアログが表示されるので、参照元である「Application1」のフォルダの中にある「ProfileLoader.cs」ファイルを選択し、右下の「追加ボタンの右にある▼」ボタンをクリックし、「リンクとして追加」を選択します。

ソースファイルをリンクとして追加

Application2 のプロジェクトに「ProfileLoader.cs」ファイルが追加されます。あくまでも Apllication1 の ProfileLoader.cs ファイルへのリンクであり、コピーではありません。ファイルのアイコンの右下に四角と矢印のアイコンが追加されていることがわかります。

この状態で Application2 の ProfileLoader.cs ファイルを開いて編集しても、Application1 の ProfileLoader.cs ファイルを編集していることになります。

Application2 にファイルのリンクが追加される

参照したファイルはもちろん、普通にソースファイルを入れた時と同じようにしています。名前空間は Application1 のままなので、下図のように名前空間を指定すれば通常どおりクラスを使用できます。

参照したソースコードを使用

Project Linker を使用してソースコードの共有を自動化する

ソースファイルを共有するプロジェクトが2つだけの場合や、共有するファイルが数個程度というのであれば、前述のとおり手動でも問題ありませんが、プロジェクトやファイルがより多い場合は手動ではかなり手間になってしまいます。上記操作で一度に共有できるファイルの数は1フォルダ単位なのでフォルダを階層化しているとそれだけ同じ手順を踏まなければなりません。また、フォルダの階層を変えたりする場合も、すべてのプロジェクトで再設定しなければいけません。

次に紹介するVisual Studio の拡張機能「Project Linker」を使用するとこれらの操作を自動化できます。拡張機能は Visual Studio の Edition が Professional 以上でないと使用できませんので注意してください。

以下の URL からダウンロードします。

Project Linker 2012 ダウンロード

ファイルをダウンロードしたらダブルクリックして起動します。インストーラー形式になっています。インストールする前にすべての Visual Studio を閉じてください。

ProjectLinker.vsix ファイルをダブルクリックしてインストール

インストール対象の 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」ボタンをクリックします。