独自に開発したコード ライブラリを使用する際の適切なリリース管理に関する情報を探しています。私たちは Visual Studio 2010 で作業しており、.NET で開発し、TFS を使用しています。状況をスケッチしましょう。
私たちはチームと協力してさまざまなプロジェクトに取り組んでおり、その結果すべてが独自のプログラム/製品になります。そこで、コードを再利用して、一種のフレームワークやライブラリに入れることを考え始めました。このために、異なるプロジェクトとそれらの間の依存関係を持つ別のソリューションを作成しました。これを「プラットフォーム」と呼びます。
「プラットフォーム」のソリューションには、たとえば次のプロジェクトがあります。
- ロギング
- Logging.Tests
- ユーティリティ
- チャートコントロール
- ロギングの依存関係
- ユーティリティの依存関係
- ローカリゼーション
- ロギングの依存関係
- ローカリゼーション.テスト
実際には、すでに 20 のプロジェクトがあり、プロジェクト間の依存関係はさらに多くなっていますが、これで状況が明確になるはずです。
2 つのプロジェクトAとBがあるとします。それらは次のようになります。
プロジェクトA
- ロギングへの参照
- ユーティリティへの参照
- ChartControl への参照
- ローカリゼーションへの参照
- ダル
- ロギングの依存関係
- メインアプリ
- DAL の依存関係
- ロギングの依存関係
- ユーティリティの依存関係
- ChartControl の依存関係
- ローカリゼーションの依存関係
プロジェクトB
- ChartControl への参照
- ローカリゼーションへの参照
- メインアプリ
- ChartControl の依存関係
- ローカリゼーションの依存関係
この種の構造をどのように管理しますか?私はいくつかの問題を見ていますが、それらに対する本当の答えはありません。
- プラットフォームのプロジェクト A と B に DLL またはコードを含めますか?
- DLL をチェックインして、別のプロジェクトにコピーを作成しますか? 分岐は有益でしょうか?
- バージョンはどうですか?プロジェクト A が Logging V.1.0.0.0 を使用していて、Logging V.1.0.0.0 も使用している ChartControl で問題なく動作するとします。ある日、新しいバージョンの Logging V.2.0.0.0 も使用する ChartControl の新しいバージョンを使用することにしました。プロジェクト A が Logging V.2.0.0.0 の使用も強制されないようにするにはどうすればよいですか?
- プラットフォームを一部としてリリースするか、すべてをリリースするか、まったくリリースしないかを決めることができました。しかし、これらすべての DLL のビルドをどのように管理すればよいでしょうか。すべてのプロジェクトのバージョン番号を手動で更新するのは大変な作業であり、すべての異なる bin フォルダーからバージョン番号を抽出するのはさらに大変です。
- プロジェクトに「プラットフォーム」をどのように統合しますか。参照フォルダーを作成し、そこにすべての DLL を配置して、ソリューションでそれらを参照しますか?
- 依存関係を追跡するにはどうすればよいですか? また、プラットフォーム全体で 1 つのリリースを行う場合、不要な DLL をどのように廃棄すればよいでしょうか。たとえば、プロジェクト B は Utils には関心がありませんが、間接的に Logging には関心があります。
- プラットフォームを 1 つとしてリリースすると、わずかな変更で完全に新しい DLL のセットが作成されます。たとえば、Utils プロジェクトを変更すると、変更がない限り、ロギング、ローカリゼーションなどの新しいバージョンも作成されます。
私もインターネットを検索しようとしましたが、社内で議論しましたが、実際の答えはどこにもありませんでした。私が Stack Overflow で見つけたのは、ライブラリとフレームワークの定義の違いに関するもので、MSDN では DLL と GAC についてたくさん読むことができます。
ベスト プラクティス、ツール、経験などは大歓迎です。