1

使用 subversion 和 Nant 进行构建。我有一个依赖于几个子项目的主项目。子项目作为单独的项目存在于 subversion 中。

我的问题是: 主项目中的 nant 构建脚本是否应该构建所有引用的子项目及其本身?或者子项目是否知道如何构建自己,我以某种方式从主构建文件中调用子项目构建文件,并以某种方式将所有输出组装到主项目构建输出中?

我目前有主项目构建文件构建所有子项目。也就是说,我对构建文件中的每个子项目都有 nant 目标。但是,这似乎在主构建文件和子项目之间建立了紧密的耦合。如果我能说“子项目知道如何构建自己”并要求他们从主项目构建自己并组装输出,那就太好了。

作为参考,我的存储库如下所示:

/Repo
  /MainProject
    /trunk
      /doc   <-- documentation
      /lib   <-- binary-only DLLs (usually 3rd party)
      /src   <-- source code for MainProject
      /svn-externals  <-- hold references to other projects in repository
...
  /ClassLib1
    /trunk
      /doc
      /lib
      /src
      /svn-externals
...
  /ClassLib2
    /trunk
      /doc
      /lib
      /src
      /svn-externals
...
  /ClassLibCommon
    /trunk
      /doc
      /lib
      /src
      /svn-externals

我正在使用 subversion svn-externals 属性引入子项目。所以我的工作副本是这样的:

/MainProject
  /build
  /doc
  /lib
  /src
    /MainProject
  /svn-externals
    /ClassLib1 <-- svn external to svn://xyz/repo/ClassLib1/trunk
      /doc
      /lib
      /src
      /svn-externals
        /ClassLibCommon <- svn external to svn://xyz/repo/ClassLibCommon/trunk
          ...
    /ClassLib2 <-- svn external to svn://xyz/repo/ClassLib2/trunk
      /doc
      /lib
      /src
      /svn-externals
        /ClassLibCommon <- svn external to svn://xyz/repo/ClassLibCommon/trunk
          ...
4

1 回答 1

0

您的问题的答案当然是“视情况而定”。

您没有说的是您如何在解决方案中引用“子项目”,或者它们是否被其他解决方案(主项目)使用?它们是项目参考吗?如果是这样,请调用 MSBuild 来构建解决方案。这将基于这些依赖项构建所有子项目。我只能假设这就是你设置它的方式。

就个人而言,如果我有一个看起来像你的设置,我不会使用项目引用,也不会对每个项目的所有代码都有外部。我会像对待第三方 DLL 一样对待这些子项目。

如果您这样做,您将使用 DLL 引用。这将子项目与主项目分离。这就是我要走的路,特别是如果这些子项目被其他项目引用。

是的,现在您必须做出一些其他决定……例如如何将这些决定存储在源代码管理中。您可以在您的 lib 文件夹中包含外部文件......或者您可以将 DLL 的副本放入您的 lib 文件夹中。这还取决于您希望如何控制版本控制。

此外,您没有提及是否使用某种类型的 CI,例如 CC.Net。如果你这样做了,如果任何子项目被修改,你可以让它触发主项目的重建。

于 2009-09-23T21:55:22.507 回答