这是SVN结构:
/trunk
+ ProjectA
+ ProjectB
+ Common
+ ProjectCore
+ References
ProjectA
和ProjectB
将提供最终产品,每个产品都有自己的发布生命周期。两个项目都使用ProjectCore
中的相同公共库。
ProjectCore
也将拥有自己的发布生命周期。
在ProjectA
和ProjectB
中,我们想要引用ProjectCore
的库。在ProjectCore
的成功发布生命周期后,ProjectCore-libs被添加到SVN。 ProjectCore-libs已添加到References
文件夹中。
通过这样做,我们释放(冻结)我们的ProjectCore
版本,作为一个经过全面测试的组件。所以我们有多个Core-lib版本:
由于我们将已发布的库(dll)添加到SVN,ProjectA
和ProjectB
可以引用它们。
这样做的最佳方法是什么?
方法1
将ProjectCore
- libs添加到名为References
的{{1}}下的新文件夹中的SVN。
在RLS_Core_X_XX
和ProjectA
的解决方案中,我们添加了对此唯一文件夹的引用:ProjectB
。
方法2
将./trunk/Common/References/RLS_Core_X_XX
- libs添加到SVN下的同一个文件夹ProjectCore
下。如果其中有一个“旧”版本,它将是一个提交。
在References/Core
和ProjectA
的解决方案中,我们添加了对ProjectB
的引用。我们使用SVN外部属性来定义Core {libs的哪个版本必须用于./trunk/Common/References/Core
和ProjectA
。
在这两种方法中,开发人员明确地需要决定他想要在他的项目中使用哪些Core-libs。除非由于缺少功能而必须升级,否则该规则将保留相同的Core-libs。 方法1 :在项目解决方案中编辑。 方法2 :在外部属性中进行编辑。
首选哪种方法?
答案 0 :(得分:1)
首先看起来很自然的是为每个项目使用推荐的文件夹结构(branches
,tags
,trunk
)文件夹单独。这也适用于通用项目,特别是如果您要使用这两个最终产品引用的版本。由于这些项目将分开开发,您应该能够创建单独的标签和分支。
完成此操作后,(并且由于您需要将所有引用包含在构建的程序集中),最好将已发布的程序集分别复制到每个项目Reference
子文件夹中。
这样,无论何时创建分支,您都拥有所需版本的确切快照,并且它独立于常见的开发。
换句话说:
/RepoRoot
+ ProjectA
+ branches
+ tags
+ v1.0
+ v1.1
+ trunk
+ references (includes 3rd-party and ProjectCore)
+ ProjectB
+ branches
+ tags
+ v0.8
+ v1.2
+ trunk
+ references
+ ProjectCore
+ branches
+ tags
+ v2.0
+ v2.1
+ trunk
+ references
答案 1 :(得分:0)
我喜欢方法1,因为它应该更快更容易在不同版本之间切换
答案 2 :(得分:0)
两种解决方案都非常相同,因此您需要立即考虑部署。假设您在.NET程序集上启用了版本控制,则在部署应用程序时必须释放正确的库。
所以,我会明确表示 - 解决方案1 - 引用其中包含lib版本名称的目录,并且不要尝试“重用”相同的引用目录。那么你就会知道要传递哪些dll,你就不会错。 (如果你在没有'use externals'选项的情况下更新你的项目,你可以做到这一点,有些人这样做。在.NET中,如果你不小心重建了'错'的dll,你将最终进入一个参考地狱的世界)。
缺点是您需要在更新时更新项目引用,但如果在项目文件中搜索+替换,这不是太大的问题。
答案 3 :(得分:0)
正如其他人已经说过的一切都完全一样,只需记录好。但我建议将ProjectCore的版本不作为trunk文件夹的子文件夹版本。相反,我会为每个版本创建分支,以便您在ProjectCore下获得如下结构:
/RepoRoot
+ ProjectCore
+ trunk
+ ProjectCore
+ branches
+ RLS_Core_1_00
+ RLS_Core_1_01
+ RLS_Core_2_00
+ ProjectA
+ trunk
+ ProjectA
+ branches
+ ProjectA_3_57
+ ProjectA_3_78
如果使用ProjectA下面的外部文件夹链接到ProjectCore的特定分支,或者如果更改.csproj文件中的参考路径,在ProjectA文件夹的外部,则将ProjectA内链接到ProjectCore结构(上面一层)只是一个品味问题。
我希望这个答案取决于开发人员对subversion外部属性的特性的熟悉程度。如果他们中的大多数人不知道这个或它究竟是如何工作的,它会使他们感到困惑并导致错误。在这种情况下,通过将路径放入.csproj文件来采取直接方法。如果每个开发人员都知道并使用外部,那就拿这个。