使用Subversion和Nant进行构建。我有一个主要项目取决于几个子项目。子项目在subversion中存在为单独的项目。Nant:使用svn-externals构建项目
我的问题是: 应在主要项目中的恶性生成脚本编译所有引用的子项目和本身?或者子项目知道如何构建自己,我以某种方式从主构建文件中调用子项目构建文件,并以某种方式将所有输出组装到主项目构建输出中?
我目前有mainproject构建文件构建所有子项目。也就是说,我对构建文件中的每个子项目都有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
我在各分项工程使用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
...
库项目被其他“主”项目使用。他们是项目参考。 两件事情:1.图书馆经常变化。 2.我认为传统的看法是不要为你有源代码的东西存储二进制文件。 – User 2009-09-24 04:57:32
这取决于。对于我来说,不要在一个以上的解决方案中引用一个项目。 我认为共享库不是主要项目的一部分。所以,就像把我的Crystal报告DLL放入svn一样,我也把我的内部框架DLL放在那里。此外,DLL引用使您可以更好地控制与每个项目一起使用的那个库的版本。当然,你可以做到以上,而不是把二进制文件放入svn。把他们放在网络共享上。 – PilotBob 2009-09-25 16:32:35
“对于我而言,在多个解决方案中不参考项目会覆盖”我不确定我理解这一点。只是为了澄清,当我使用“项目”这个术语时,我的意思是说它在一般意义上不是在视觉工作室的意义上。所以在我看来,按照定义,一个类库“项目”(实际上是它自己的解决方案)旨在用于多个解决方案。 – User 2009-09-28 04:47:07