具有多个 Visual Studio 解决方案的 TFS 项目

标签 tfs

我们的团队正在考虑使用 Team Foundation Server v.11 (2012) 来管理我们的项目。我们目前在电子表格中进行项目管理。我们的团队只为内部客户开发软件,项目之间有很多 dll 共享。我们还使用 SVN 进行源代码版本控制。

我们为应用程序的不同部分提供解决方案:通用库、应用程序库(业务规则等)、内联网网站、互联网网站、Windows 窗体。这是我们的 SVN 结构的样子

SVN
    -CommonLibrary (VS Solution)
        -Source
            -CommonLibrary.Core (VS Project)
            -CommonLibrary.Security (VS Project)
            -CommonLibrary.Web (VS Project)
    -OurCompanyLibrary (VS Solution)
        -Libraries (Projects within this solution reference these)
            -CommonLibrary.Core.dll
            -CommonLibrary.Security.dll
        -Source
            -OurCompanyLibrary.Application1 (VS Project)
            -...
            -OurCompanyLibrary.ApplicationN (VS Project)
    -OurCompanyIntranet (VS Solution) (MVC framework)
        -Libraries (Projects within this solution reference these)
            -CommonLibrary.Core.dll
            -CommonLibrary.Security.dll
            -CommonLibrary.Web.dll
            -OurCompanyLibrary.Application1.dll
        -Source
            -OurCompanyIntranet.Application1 (VS Class Library Project)
            -...
            -OurCompanyIntranet.ApplicationN (VS Class Library Project)
            OurCompanyIntranet.UI (VS Web Project)
    -OurCompanyInternet (VS Solution) (MVC framework)
        -Libraries (Projects within this solution reference these)
            -CommonLibrary.Core.dll
            -CommonLibrary.Security.dll
            -CommonLibrary.Web.dll
            -OurCompanyLibrary.Application1.dll
        -Source
            -OurCompanyInternet.Application1 (VS Class Library Project)
            -...
            -OurCompanyInternet.ApplicationN (VS Class Library Project)
            -OurCompanyInternet.UI (VS Web Project)

之所以将代码拆分成多个解决方案,是因为我们可以在不同情况下(内网应用、互联网应用、Winform 应用)重用应用程序库。此外,Intranet 和 Internet 解决方案包含多个应用程序。这是我们目前的结构。我不确定这是最好的组织结构,但它对我们有用。

切换到 TFS 的问题是一个团队项目不能在多个 VS 解决方案中包含部分。例如,我们将为 Application1 设置一个 TFS 团队项目,以便我们可以为该应用程序创建一个产品待办事项列表。 Application1 需要对 OurCompanyLibrary、OurCompanyIntranet 和 OurCompanyInternet 进行更改才能完成该应用程序,但是,使用 TFS,Application1 将只有一个 VS 解决方案。

这是我们如何开发应用程序的示例。我们存储在 OurCompanyLibrary VS 解决方案中的所有域模型和业务规则。当我们开发一个应用程序时,称之为Application1,我们首先在OurCompanyLibrary VS Solution下的OurCompanyLibrary.Application1 VS项目中开始创建领域模型和业务规则。一旦开发了域模型,我们就开始在 OurCompanyIntranet 和 OurCompanyInternet VS Solutions 中对事物的 UI 端进行编程。这些解决方案是一个 MVC 风格的网站。 OurCompanyIntranet 包含一个 VS Web 项目 OurCompanyIntranet.UI,其中包含所有 View (.aspx 文件)、css、javasciprt 等。OurCompanyIntranet 还包含由应用程序(在本例中为 OurCompanyIntranet.Application1)分隔的所有模型和 Controller 。在 TFS 中组织它成为一个问题,因为我们想要 Application1 的团队项目,但该应用程序可以跨越多个解决方案,我们不希望通过将相同的 OurCompanyIntranet 和 OurCompanyInternet VS Solutions 添加到源代码控制来在任何地方都有重复的代码。

你会如何在 TFS 中组织它?是否有另一种更有意义的方式来组织我们的代码结构?任何可以引导我们朝着正确方向前进的文章或网站都会有很大帮助。

最佳答案

首先,不要使用多个团队项目,这是每个人在开始时都会犯的一个巨大错误。对于您的团队规模和您开发的内容:一个团队项目就是您所需要的。

当有两个完全不同的团队使用完全不同的方法/流程从事完全不同的项目时,您可以使用两个团队项目。

通过一个团队项目,您仍然可以:

  • 有很多分支(相关或不相关)。
  • 在您需要的最小级别管理源代码管理
  • 使用工作项的区域路径(它是一个节点树)将您的项目拆分为子类别(功能性、技术性,无论您需要什么)。通过这种方式,您可以拥有一个大的产品积压或专门的积压。
  • 关于整个项目或特定区域的总体报告(仍在使用区域路径,但在 Reporting Services 中)
  • 相信我,这是最好的方法,很多人(包括我第一次)犯了使用多个团队项目的错误,然后不得不为此付出代价。您需要的是良好的源代码管理层次结构和良好的区域路径树。

  • 关于解决方案:

    项目的每个主要组件都有一个解决方案并不是一件坏事,开发人员可以处理项目的一个专用子集,以最大限度地提高生产力并减少组件之间的耦合。

    但是您仍然可以拥有一个引用所有项目的全局解决方案,并且可以在您需要进行影响所有项目的更改时使用该解决方案。拥有全局解决方案也是一种轻松构建整个项目的简单方法。

    这里的问题是 关于交叉组件引用 ,如果您开发的一个组件(例如 Application1)需要您开发的另一个组件(例如 OurCompanyLibrary),那么它会在两者之间创建依赖关系,Application1 必须引用 OurCompanyLibrary 的“构建程序集”。

    这意味着:
  • 您必须在源代码管理中的某处创建一个位置,以存储其他人将引用的所有组件的构建程序集。维护一个构建周期以按照正确的顺序发布所有内容。
  • 利用新标准 Nuget并设置一个内部 Nuget 服务器(非常容易做到),并为其他人将引用的组件构建您自己的 Nuget 包。
  • 最简单的方法是在解决方案中包含所有内部开发的依赖项,以确保它们在需要时构建。这很容易做到,但您的 Application1 项目将包括您的大部分 VS 项目。我不会说这是一个好的或坏的方法,这是你的决定。有时,简单的方法是最好的方法。

  • 每种方式都有其优点/缺点,只有您可以决定哪种方式最好。

    关于具有多个 Visual Studio 解决方案的 TFS 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902951/

    相关文章:

    visual-studio-2010 - 如何通过互联网连接TFS

    command-line - TFS手册Mstest发布结果?

    powershell - 在TFS构建结束时运行时出现Remove-Item错误

    visual-studio - 将项目(在源代码控制下)移动到不同的文件夹

    TFS "Copy"从一个字段到另一个字段的值

    TFS 2010 问题与跟踪生成中的变更集是门控 checkin 的结果

    .net - TFS 与 SVN

    Project Rider 中的 TFS 支持/配置

    visual-studio - Windows 更新后,Visual Studio 停止使用我们的 TFS 服务器

    visual-studio - 在 Web 部署之后运行部署后脚本