使用subversion和Nant进行构建。我有一个主要项目,取决于几个子项目。子项目在subversion中作为单独的项目存在。
我的问题是: 主项目中的nant构建脚本是否应构建所有引用的子项目及其自身?或者子项目知道如何构建自己,我以某种方式从主构建文件调用子项目构建文件,并以某种方式将所有输出组装到主项目构建输出中?
我目前有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
我使用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
...
答案 0 :(得分:0)
你的问题的答案当然是“它取决于”。
您没有说的是如何引用解决方案中的“子项目”或其他解决方案(主要项目)是否使用它们?他们是项目参考吗?如果是这样,请不要调用MSBuild来构建解决方案。这将基于这些依赖项构建所有子项目。我只能假设这是你设置它的方式。
就个人而言,如果我有一个看起来像你的设置我不会使用项目引用,也不会对每个项目的所有代码都有外部。我会将这些子项目视为对待您的第三方DLL。
如果你这样做,你将使用DLL引用。这将子项目与主项目分离。这是我的方式,特别是如果这些子项目被其他项目引用。
是的,现在你必须做出一些其他的决定......例如如何在源代码管理中存储它们。你可以在你的lib文件夹中有外部...或者你可以把DLL的副本放到你的lib文件夹中。这还取决于您希望如何控制版本控制。
另外,您没有提及是否使用某种类型的CI,例如CC.Net。如果你这样做,你可以在任何子项目被修改的情况下触发主项目的重建。