Visual Studio (少なくとも 2010 年 — 機能が追加された正確な時期は不明) では、既存の項目を「リンク」としてプロジェクトに追加できます。つまり、ソース ファイルはプロジェクト間で共有されます。ソース ファイルのバージョンは 1 つだけ存在します。
- プロジェクトを右クリックします。
- [追加..既存のアイテム] をクリックします。
- 選択したソース ファイルを見つけて選択します。
- 「追加」ボタンはドロップダウンです。ボタンのドロップダウン アイコンをクリックします。
- 「リンクとして追加」をクリックします。
簡単!
これで、共有ソース ファイルへの変更が両方の場所に反映されます。もちろん、欠点は、共有ソース ファイルへの変更が、開発者が認識しているよりも広範な影響を与える可能性があることを開発者が把握できないことです。
もう 1 つのオプションはhard link
、2 つのファイル名が同じファイル (Unix 用語では「i ノード」) を参照するように作成することです。コマンド ラインで、魔法の呪文を唱えるだけです。
fsutil hardlink create <new-filename> <existing-filename>
何かのようなもの:
fsutil hardlink create c:\foo\bar\some-project\bazbat.cs c:\foo\bar\another-project\bazbat.cs
制限は、両方の名前が同じボリューム上にある必要があるということです。
もちろん、これはソース管理システムを混乱させる可能性があります。ファイルシステムが必ずしもツリー構造であるとは限らず、同じファイルが複数のディレクトリに存在する可能性を TFS が考慮していないことは間違いありません。
ハードリンクされたファイルは、任意の順序で削除できます。最後のリンクが削除されると、ファイルは存在しなくなります。
もちろん、3 番目のオプションであり、おそらく「ベスト プラクティス」です。この用語は嫌いです。— クライアントとサーバーの両方に展開される独立したアセンブリにシャード クラスを分解することです。ビルド後に浮遊するアセンブリの数を制限したい場合は、アセンブリilmerge
をマージするために使用できます。
考えてみれば、必要に応じて (または起動時にも) 読み込まれる埋め込みリソースとして共有アセンブリを埋め込むことができない理由もありません。これは、 を使用するよりもきれいかもしれませんilmerge
。その方法は次のとおりです。
http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx