web-dev-qa-db-ja.com

TFSおよび参照されるDLL

TFSとVS 2010を使用しています。

ソース管理としてTFSを使用しているプロジェクトに取り組んでいます。私は自分のプロジェクトでかなりの数のDLL(log4netなど)をダウンロードして参照しています。

新しいプログラマーがTFSに接続し、プロジェクトをソース管理から外したとき、これらの参照されたすべてのdllが欠落していると言ったため、ビルドに失敗しました。

ここで何を間違えましたか?これらの参照DLLをソース管理に含めるにはどうすればよいですか。これらのすべてのdllを参照する前にプロジェクトに追加する必要がありますか?それらを参照したとき、ファイルシステム上のどこにあるかを参照しました。

35
twal

サードパーティのDLLのベストプラクティスは、sln/projファイル構造に「ライブラリ」フォルダーを作成し、必要なすべてのDLLをこのローカルフォルダーにコピーして参照することです。また、これらのDLLがソース管理にチェックインされていることを確認する必要があります。このようにして、プロジェクトで作業するすべての人がすべてのDLLのまったく同じバージョンを取得し、参照パスはまったく同じになります。

任意のダウンロードまたはインストール場所でサードパーティのライブラリを参照すると、すべての開発者がすべてのDLLに対して同じダウンロード構造を維持する必要があるため、問題が発生します。また、全員がプロジェクト構造の外部でDLLを参照する場合、全員が同じバージョンであることを保証するのは困難です。

もう1つのオプションは、DLLをすべてのユーザーにGACにインストールさせることですが、これは特にバージョン管理と展開の場合には大きな苦痛になります。

49
Andy White

プロジェクトフォルダーに「ThirdPartyDLL」フォルダーを作成し、そこにすべての追加DLLをコピーしました。次に、ソースエクスプローラーに移動し、それらのDLLをチーム基盤サーバーに追加したので、アプリケーションの特定のバージョンに対して正しいバージョンのDLLを使用していることを確認できました(したがって、他のすべてのユーザーは私とまったく同じページにいます) )。

表示-他のウィンドウ-ソースcoontrol Explorerプロジェクトフォルダーを右クリック-アイテムをフォルダーに追加

DLLを含む特定のフォルダーを選択することはできませんが、代わりにフォルダー内の個々のDLLファイルを選択できます。その中に「ThirdPartyDLL」フォルダーが表示されます。窓。

これが完了すると、これらのdllはチーム基盤のソース管理に含まれます。開発者がチェックインするたびに、最新バージョンのDLLを取得します。

アプリ内の古い参照を削除し、それらをth​​irdpartydllフォルダーに変更することを忘れないでください。

DLLをbinフォルダーにコピーしていましたが、DLLがアップグレードされたときに問題が発生しました。当初、私のプロジェクトが小さい頃は大したことではありませんでした。複数のDLLとアプリケーションを作成したので、プロジェクト外でDLLの一貫したバージョンを維持することが非常に困難になりました。私の最良の例は、購入したライセンスDLLです。これがアップグレードされたとき、すべてのアプリケーションとライブラリは同じバージョンである必要がありました。忘れてしまった場合、奇妙な問題が発生したか、アプリケーションが機能しなくなりました。すべてを1つのフォルダーに入れたので、一度変更を加えるとすべてがアップグレードされます。

お役に立てれば。

7
Neon Blue

アンディの提案は良いものであり、私は過去にそれを使用しました。私の現在の仕事では、ネットワーク共有上に「参照」フォルダーがあり、私たち全員がそれを構築できます。ここには非常に高速なネットワークがありますが、すべての開発者は単一のオフィスにいます。リモート開発者が多い場合やネットワークが遅い場合、このソリューションはうまく機能しません。

2
Steve Danner

これに対処するためのさまざまな方法を試しましたが、必要なdllをbinフォルダーにドロップし、ソース管理用のプロジェクトに確実に含まれるようにしました。これは良いアイデアではないかもしれないと人々は言うが、誰もそれについて正当な理由を提供していないし、私にとってはうまくいった。

私の2番目の選択肢は、ネットワーク共有にいくつかのスペースを作り、そこにさまざまなサードパーティのdllを整理することです。ファイルをバージョン番号の付いたフォルダに入れて、物事をまっすぐに保つことができ、誰もが通常のネットワークパスを参照として使用する限り、必要なものすべてにアクセスできます。

プロジェクト内に別のフォルダーを追加することも実行可能ですが、リリースに含めたくない余分なファイルが作成されるため、面倒なようです。

1
lincolnk