2

Subversion と nant (および Visual Studio IDE) を使用しています

私はhttp://blog.jpboodhoo.com/NAntStarterSeries.aspxで提案されているプロジェクト構造に従っています。これは、開発者がチェックアウトを実行して、1 つのステップでプロジェクトをすぐにビルドできる自己完結型のサブバージョン ディレクトリを提唱しています。

私のレポ構造は次のようなものです:

/Repo
  /MainProject
    /trunk
      /doc   <-- documentation
      /lib   <-- binary-only DLLs
      /src   <-- source code for MainProject
      /tools <-- holds tools like nant, nunit, etc
...
  /ClassLibrary1
    /trunk
      /doc
      /lib
      /src
      /tools
...
  /ClassLibrary2
    /trunk
      /doc
      /lib
      /src
      /tools

はっきりしていないのは、サードパーティのライブラリ dll 自体を参照するクラス ライブラリを持つプロジェクトを構築する方法です。

現在、次のような作業ディレクトリを持つメインプロジェクトがあります

例:

/MainProject
  /build
  /lib
  /src
    /MainProject
    /ClassLibrary1 <-- svn external to svn://server/repo/ClassLibrary1/trunk/src
    /ClassLibrary2 <-- svn external to svn://server/repo/ClassLibrary2/trunk/src
  /tools
  ...

MainProject をビルドするときに、クラス ライブラリをコンパイルし、dll をビルド フォルダーに出力します。ただし、クラス ライブラリ自体には、参照するサード パーティのバイナリのみの DLL があります。

私の質問は、MainProject をビルドするために、何らかの形でクラス ライブラリからサード パーティの DLL をビルド出力に取得する必要があるということです。それ、どうやったら出来るの?

考え: 1. これらのサード パーティの dll のコピーを MainProject の lib フォルダーに保存する必要がありますか? 2. または、クラス ライブラリの lib フォルダにアクセスできるように、svn:external 参照を src ではなく、クラス ライブラリ プロジェクトのトランクにする必要がありますか? 3. svn:externals の Subversion 1.6 機能を個々のファイルに使用する必要がありますか?

4

3 に答える 3

1

個人的には、参照されているライブラリのトランクを持ち込みます。(実際、私はタグのルートを持ち込みますが、それは重要ではありません)。

必要なdllの別のコピーを保持している場合、そのロジックはすべてプロジェクト内で複製されているため、参照されているライブラリがそれ自体に必要なものを決定することを実際には許可していません。複数の外部参照またはファイル外部参照を使用してコードとdllを取り込む場合も、同じことが起こります。

ここでの私の原則は、ライブラリは必要なものを知っているということです。ライブラリへの単一の外部参照で、そのライブラリと必要なすべてのものを取得できます。

そうすれば、ライブラリの参照を変更した場合でも、すべてのプロジェクトがそれを取得することを確信できます。(IDEがこれをサポートしていない場合、それはIDEの問題であり、サブバージョンの問題ではありません)。また、ポイントしているライブラリのバージョンを変更すると、適切な参照も自動的に取得され、ビルドの失敗をデバッグして何が問題になっているのかを解明する必要がないというプロジェクトとしても自信を持っていただけます。 。

于 2009-08-14T07:39:21.980 に答える
1
  1. これらのサード パーティの dll のコピーを MainProject の lib フォルダーに保存する必要がありますか? 私は外部ライブラリをトランクの下のバイナリディレクトリに保存することを好みますが、ソースの隣に...または参照、依存関係などと呼びます。これにより、開発者は最新のものを取得でき、必要なものはすべてダウンします。プロジェクト自体の一部である必要はありません。ビルドの実行時にアクセスできる必要があるだけです。

  2. または、クラス ライブラリの lib フォルダにアクセスできるように、svn:external 参照を src ではなく、クラス ライブラリ プロジェクトのトランクにする必要がありますか? 新しい開発者を立ち上げて実行するプロセスがより複雑になるため、私はこのアプローチを好みません。アセンブリは、それ自体にある程度の重要性がある場合、独自のリポジトリに入れることができると思います。しかし、私はその出力を決して参照しません。上記の参照または依存関係ディレクトリに出力を「デプロイ」するメカニズムを促進するビルド プロセスがラップされている必要があります。ただし、そのような展開を自動化すると、問題が発生する可能性があります。アセンブリに独自のプロセスがあるとよいでしょう。そして、アセンブリの新しいバージョンがリリースされると、それを必要とするプロジェクトの開発者によって手動で取り込まれます。次に、それをテストし、受け入れて、ビルド プロセスに配置することができました。明らかに、そのアセンブリが毎日変更される場合、何らかの自動化が必要になる場合があります。

  3. svn:externals の Subversion 1.6 機能を個々のファイルに使用する必要がありますか? いいえ。プロジェクト/ソリューションを自己完結型のエンティティとして保持することを好みます。テンティカルをすべての場所に分散させると、依存関係がより苦痛になります。サイロをできる限り維持し、新しいものをできる限り手動で導入するか、変更の頻度が許す限り手動で行います。

于 2009-08-13T22:28:26.407 に答える
0

私は同様の必要性を持っていて、TortoiseSVN のドキュメントで短くて甘い答えを見つけました:

http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-howto-common-projects.html

于 2010-12-01T18:17:44.670 に答える