4

这是SVN结构:

/trunk
    + ProjectA
    + ProjectB
    + Common
        + ProjectCore
        + References

ProjectA并将ProjectB交付最终产品,每个产品都可以有自己的发布生命周期。这两个项目都使用来自ProjectCore. ProjectCore也会有自己的发布生命周期。在中ProjectAProjectB我们要引用ProjectCore. ProjectCore-libs 在ProjectCore. ProjectCore-libs 被添加到References文件夹中。

通过这样做,我们发布(冻结)我们的ProjectCore构建,作为一个经过全面测试的组件。所以我们有多个 Core-lib 版本:

  • RLS_Core_1.00
  • RLS_Core_1.01
  • RLS_Core_2.00
  • RLS_Core_3.00

由于我们将发布的库(dll)添加到SVN,ProjectA并且ProjectB可以参考它们。做到这一点的最佳方法是什么?

方法一

在名为ProjectCore的新文件夹中将 -libs添加到 SVN 。ReferencesRLS_Core_X_XX

在解决方案中ProjectAProjectB我们添加了对这个唯一文件夹的引用:./trunk/Common/References/RLS_Core_X_XX.

方法二

ProjectCore在同一个文件夹下将 -libs 添加到 SVN References/Core。如果其中有一个“旧”版本,它将是一个提交。

在解决方案中ProjectA我们ProjectB添加了一个引用:./trunk/Common/References/Core. 我们使用 SVN 外部属性来定义 Core-libs 的哪个版本必须用于ProjectAProjectB

在这两种方法中,开发人员明确需要决定他想在他的项目解决方案中使用什么 Core-libs 版本。规则是保持相同的核心库,除非您因为缺少功能而必须升级。 方法1:在项目解决方案中编辑。方法 2:编辑外部属性。

首选什么方法?

4

4 回答 4

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
于 2012-02-28T10:51:53.787 回答
0

我喜欢方法 1,因为它应该更快更容易在不同版本之间切换

于 2012-02-28T10:48:13.767 回答
0

两种解决方案几乎相同,因此您现在需要考虑部署。假设您在 .NET 程序集上启用了版本控制,则必须在部署应用程序时发布正确的库。

因此,我会明确说明 - 解决方案 1 - 引用其中包含 lib 版本名称的目录,并且不要尝试“重用”相同的引用目录。然后你就会知道要传递哪组dll,你就不会弄错了。(如果您在没有“使用外部”选项的情况下更新项目,则可以这样做,有些人会这样做。在 .NET 中,如果您不小心使用“错误”的 dll 进行了重建,您最终会陷入参考地狱的世界)。

缺点是更新时需要更新项目引用,但如果在项目文件中搜索+替换,这不是什么大问题。

于 2012-02-28T10:57:33.057 回答
0

正如其他人已经说过的那样,这一切都是一样的,只需要很好地记录下来。但我建议不要将 ProjectCore 的版本作为主干文件夹的子文件夹版本。相反,我会为每个版本创建分支,以便您在 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 中的 ProjectA 链接到 ProjectCore 的特定分支,或者如果您将 .csproj 文件中的引用路径更改为超出ProjectA 文件夹结构(上一级)以链接只是口味问题。

I would depend this answer on how well the developers are comfortable with the feature of the subversion external property. If most of them don't know this or how exactly it works it will confuse them and leads to errors. In this case take the direct approach by putting the path into .csproj file. If every developer knows and uses externals take this.

于 2012-02-28T11:09:17.233 回答