最近、私たちはプロジェクトにタグを付けたり分岐させたりする問題に遭遇し、古いフォルダー構造を指しているDLL /プロジェクト参照のためにコンパイルの問題がいくつかありました。
プロジェクトごとに「外部bin」フォルダーを作成し、参照されたdllをこれらのフォルダーにコピーしました。これは最善の方法ですか、これを処理するための特定の業界標準はありますか?
最近、私たちはプロジェクトにタグを付けたり分岐させたりする問題に遭遇し、古いフォルダー構造を指しているDLL /プロジェクト参照のためにコンパイルの問題がいくつかありました。
プロジェクトごとに「外部bin」フォルダーを作成し、参照されたdllをこれらのフォルダーにコピーしました。これは最善の方法ですか、これを処理するための特定の業界標準はありますか?
回答:
依存関係を処理するには、nugetが最良の方法だと思います。
nugetはバージョンを管理でき、ローカルの nugetサーバーから依存関係を自動的にダウンロードできます。
ローカルサーバーの作成/設定は非常に簡単です。新しい空のASP.NETプロジェクトを作成し、nuget-server
nugetパッケージをインストールします(nuget;を使用)。
これは、すべての依存関係をチェックインしたり、TFSを使用してバージョンを管理したりする必要がないことも意味します。
実際にはそうではありません-マイクロソフトは、参照を処理する最良の方法は、1つの巨大なソリューションでプロジェクトを構築することだと述べています。はい、私は知っています、彼らは本当にそれも意味します。
パターンとプラクティスのチームは、TFSに関するベストプラクティスをまとめましたが、それは一般的なビルドに適用されます。ソリューションのセットアップには、「1つの大きなソリューション」という3つのタイプがあります。パーティション化されたアプローチは、ほとんどの人が順番にビルドしてアーティファクトを共通のディレクトリにコピーすることでビルドを管理する方法によく似ています(これは.NETの助けにはなりません)サーバー全体の「インクルード」または参照への「ライブラリ」パス)、およびパーティション化されたもののより複雑なバージョンである複数ソリューションのセットアップ。
彼らが言う
In general you should:
Use a single solution strategy unless the resulting solution is too large to load into Visual Studio.
Use multiple solutions to create specific views on sub-systems of your application.
Use multiple solutions to reduce the time it takes to load a solution and to reduce build time for developers.
TFSの場合、サブバージョンの外部に似たワークスペースマッピングに依存するのではなく、プロジェクト内の外部プロジェクトを分岐することをお勧めします。個人的には、彼らのアドバイスはベストプラクティスではないと思いますが、リファレンスを使用するときに発生するビルドの問題を最小限に抑えようとしていると思います。
私は、必要なものだけをビルドしてシステムをショートカットしようとする.NETビルド、すべてを実行する夜間ビルド、およびすべての新しいアセンブリをディレクトリにコピーする問題がありました。これは、全員、特にテスターが同期を保つための最良の方法です。これは本当に.NETアプリにのみ適用されます。C++のアプリはバージョン付きのアセンブリやコンポーネントの呼び出しで問題を引き起こす可能性のある同様の側面がないため、引き続き機能する傾向があります。このアプローチはうまく機能しますが、部分的なビルドが正常であり、全体をvapingし、再ビルドが最も安全であると常に想定できるわけではありません。
これは、ソリューションの構造とバージョン管理ソフトウェアの機能によって異なります。以前は、特にサードパーティが参照するライブラリ用のドキュメントとフォルダを保持するソリューションで、ビルドされていない/スキップされたプロジェクトを保持していました。これはソリューションの一部であるため、これらのファイルへのパスは相対パスを使用して参照できます。TFS 2010に移動した後、このプロジェクトを削除し、主なブランチと並行して、チームプロジェクトのそのソリューションのフォルダーに "Support"ディレクトリを追加しました。どちらの場合でも、ライブラリのソース管理バージョンは、開発者がマシンをどのように構成しているかに関係なく、比較的同じ場所に配置されます。
バージョン管理にsubversionを使用する場合、この目的で「externals」プロパティを利用できます。これにより、共有DLLのローカルコピーを現在のプロジェクトの近くの相対パスに保持できます。これにより、プロジェクトのメインディレクトリを別のフォルダーに変更しても、変更されない相対ファイルパスでそのDLLを簡単に参照できます。外部では、含める特定のバージョンまたはリビジョンも定義できます。