6

私のプロジェクトの多くには、Castle/NHibernate/Rhino-Tools スタックが含まれています。これについて紛らわしいのは、Castle がいくつかの NHibernate ライブラリに依存し、NHibernate がいくつかの Castle ライブラリに依存し、Rhino-Tools が両方に依存していることです。

3 つのプロジェクトすべてを自分のマシンでビルドしましたが、NHibernate と Castle のビルドから得られたライブラリを使用して Rhino-Tools をビルドしたので、NHibernate/Castle ライブラリをコピーするのは少し冗長だと感じています。

現在、プロジェクト ツリーの / thirdparty/libs フォルダー内の個別のフォルダーにすべてのプロジェクトを含めています。プロジェクトに / thirdparty/libs/rhino-tools を配置して、そこから Castle/NHibernate ライブラリを使用するだけでよいのでしょうか? ファイルを複製しないことは理にかなっているように思えますが、各プロジェクトを個別のフォルダーに配置することも好きです。

これについてどう思いますか。

4

4 に答える 4

3

これは、CodePlex の Refix オープン ソース プロジェクトで取り組んでいる問題の 1 つです。

Refix はソリューション内のすべてのプロジェクトを解析し、プロジェクトがコンパイルされる前に、マシン上の単一のローカル リポジトリから必要なバイナリをソリューション ツリー内のフォルダーにコピーし、それらのプロジェクトを指すようにするという考え方です。この方法では、バイナリをコミットする必要はありません。ローカルの Refix リポジトリは、リモートのリポジトリからバイナリをプルし (repo.refixcentral.com でセットアップしています)、中央に保持されていない追加のソフトウェアを保持できるチーム/部門/会社用の中間リポジトリをセットアップできます。 .

また、競合するバージョン番号を解決しようとします。Visual Studio は、コンポーネントのバージョン番号の不一致を許容しすぎる可能性があり、2 つの異なるバージョンが必要になるため、コンパイルしても実行時に依存関係の読み込みに失敗すると失敗するソリューションにつながります。

したがって、「外部ライブラリを .Net プロジェクトにどのようにパッケージ化しますか」という質問に答えるために、私たちのビジョンは、そうしないことです。ビルド スクリプトに Refix ステップを含めて、それについて心配させてください。

于 2010-06-11T13:25:15.590 に答える
1

各プロジェクト ツリーにサードパーティまたはベンダーのフォルダーを作成することを強くお勧めします。rhino-tools パッケージの 32 個のコピーを保持するのが煩わしい場合は、コード リポジトリに 1 つのコピーを保持し、プロジェクト ツリーで外部参照を行うことができます。

SVN を使用しているとしましょう。「サードパーティ ライブラリ」と呼ばれるリポジトリを作成できます。このリポジトリには、バージョン管理されたライブラリのコピーがあります。次に、プロジェクト ツリーの「サードパーティ」フォルダに外部プロパティを作成します。これにより、中央のサードパーティ ライブラリが自動的にチェックアウトされます。この方法では、たとえば、セキュリティやバグ修正が発生した場合に 1 か所で更新するだけで済みますが、各プロジェクトでは、使用するサードパーティ ライブラリとバージョンを選択することができます。

サードパーティのライブラリの内部的な deps については、私は気にしません。プロジェクトを初めてコンパイルするときに、暗黙的な依存関係のために一部のライブラリが bin フォルダーにコピーされない場合は、bin フォルダーに外部属性を追加できます。これにより、不足しているライブラリが自動的にチェックアウトされます。そうすれば、サードパーティのライブラリを 1 か所で更新するだけで済みます。

于 2009-02-17T21:21:55.147 に答える
1

追加のプローブ パスを app.config ファイルに追加して、依存関係の dll を見つけます。このようにして、必要なものすべてのコピーを 1 つだけ持つだけで済みます。ただし、この機能の使用にはいくつかの癖があります (特定の方法でフォルダー構造を作成する必要があります)。タグの詳細については、こちらをご覧ください。

于 2009-02-13T09:39:50.277 に答える
1

それぞれにフォルダーを使用しますが、これが慣例のようです。

  1. それらをコピーしていると、本当に違いがありますか?
  2. 1つを切り替えたい場合はどうしますか?新しい O/R マッパーを使用するとします。Rhino-Tools フォルダー内の DLL を選択的に削除するよりも、NHibernate フォルダーを削除する方がはるかに簡単です。
  3. これを論理的な結論に導くと、すべてがlog4netを使用するため、libフォルダーにフォルダー編成はありません:)
于 2009-02-13T08:33:18.347 に答える