【问题标题】:How to version resources that are shared across projects如何对跨项目共享的资源进行版本控制
【发布时间】:2010-10-20 04:47:01
【问题描述】:

我们使用 Team Foundation Server 并拥有大量 ASP.NET Web 应用程序项目。每个 Web 应用程序都使用我们内部开发的自定义内容管理系统。 CMS 本身就是一个 ASP.NET Web 应用程序。

部署后,CMS 驻留在子目录中,例如“/Admin”。 CMS 由 .aspx 和 ascx 文件组成,相应的程序集当然放在 bin 中。

目前,CMS 文件在源代码控制中为每个 Web 应用程序单独存在。换句话说,每个依赖于 CMS 的 Web 应用程序中都存在一个“Admin”文件夹。这带来了明显的挑战,因为 CMS 的更新必须分发到每个相关站点。自动化/简化流程是我的工作。

我们目前不执行任何自动构建。我对 TFS 中的源代码控制分支知识有限,我不确定它是否适用于这种情况。确保依赖项目从 CMS 项目接收最新程序集和标记的最佳方法是什么?提前致谢。

听起来#2(来自'bamboo)是我所追求的解决方案。鉴于共享代码已经存在于每个单独的项目中,您能否简要描述一下我将通过“分支/共享”CMS 的过程?此外,值得注意的是,我不希望将 .cs 文件传播到依赖项目,而只是传播到标记和程序集。这会改变策略吗?我是否应该先在共享项目上创建一个构建事件以将必要的文件复制到“Release”文件夹,然后分支 Release 文件夹?

【问题讨论】:

    标签: asp.net version-control tfs build-automation branch


    【解决方案1】:

    这是处理这种情况的几种流行方法。

    1. 将共享内容的 TFS 项目映射到每个应用程序工作区,然后将共享项目包含在每个应用程序解决方案中。如果您希望所有团队/应用在构建时立即获得共享更改,请使用此方法,因为他们也会获得最新的共享内容。

    2. 将共享内容分支/共享到每个应用程序源代码控制树中。这在 TFS 中很容易做到。如果每个团队/应用程序都想控制他们何时获得最新的共享内容,这真的很好。这使团队能够做他们的事情,直到他们准备好整合共享的东西。

    我通常总是喜欢#2。但这实际上取决于您需要/想要如何工作的具体情况。

    【讨论】:

    • 听起来#2 是我想要的解决方案。鉴于共享代码已经存在于每个单独的项目中,您能否简要描述一下我将通过“分支/共享”CMS 的过程?再次感谢。
    • TFS 中没有共享,您必须对文件进行分支。这仍然意味着每次进行更改时,您都必须将更改合并到所有分支中,请参阅链接:social.msdn.microsoft.com/Forums/en-US/tfsgeneral/thread/…
    • 您实际上并不想要分享。分支解决方案更好,因为它意味着每个项目都会获得共享代码的已知版本。只有当他们想要一个更新的版本时,他们才会“合并”到那个特定的版本。这也允许不同的项目使用不同版本的共享代码。
    • 即使我真的只想要标记和程序集,分支整个源目录(即包括 .cs 文件)是否是标准做法?我的目标是“单向”分支,其中仅在父分支中进行更改,这应该消除合并冲突。我想我可以分支所有内容并从子项目的构建中排除目录?这是常态吗?
    【解决方案2】:

    不确定 TFS,但在大多数源代码控制系统中,您可以跨多个位置共享代码。对任何共享副本的更改都会反映在所有副本中。在 Visual Studio 级别,它们将显示为独立的代码片段。

    您的每个网络应用程序(解决方案)都包含一个完全由共享代码组成的项目。通常源代码是共享的,并成为构建过程的一部分。您可以共享生成的 DLL,但大多数人不使用源代码控制 DLL。

    如果您没有共享部分的源代码,则可能在 GAC 中安装代码成为您创建共享部分的唯一选择。

    【讨论】:

      【解决方案3】:

      我们有一个共享库,用于我们的多个项目。然后我们添加对共享库的引用,而不是实际的项目...

      然后您必须将引用的路径添加到构建 xml,以便您的 TFS 服务器知道 .dll 的位置。每次为项目完成新构建时,它都会将最新版本的 shared 复制到项目的 bin 中。

      包括 Shared 在内的所有项目都有 4 个分支:开发、集成、暂存和生产。因此,当我们需要对共享库进行更改并且我们在其开发分支中进行更改时,因为它是孤立的。一旦我们感到高兴,我们就会将我们的更改合并到集成中。我们构建共享集成,然后构建受变更影响的项目。这是我们开始测试其他应用程序以查看我们的更改是否导致任何错误的时候。所以...

      1. 在一个地方对共享库进行更改
      2. 合并到一个分支,而不是每个项目中的多个分支。
      3. 使用 Shared 就像添加参考一样简单
      4. 可以将单个项目和 Shared 版本从开发推送到生产,而不会影响任何其他项目。 Shared 的 .dll 版本被复制到项目 bin 文件夹中。一旦对另一个项目进行了更改,它将在通过其分支推送时获得最新版本。

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 2017-03-10
        • 2015-03-08
        • 1970-01-01
        • 2011-03-25
        • 2017-10-11
        • 2018-02-16
        • 2019-11-03
        相关资源
        最近更新 更多