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

awi*_*nsk 29 tfs

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

我们为应用程序的不同部分提供解决方案:公共库,应用程序库(业务规则等),Intranet网站,Internet网站,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)
Run Code Online (Sandbox Code Playgroud)

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

切换到TFS的问题是一个团队项目不能在多个VS解决方案中拥有部件.例如,我们将为Application1设置TFS团队项目,以便我们可以为该应用程序提供产品待办事项.Application1需要更改OurCompanyLibrary,OurCompanyIntranet和OurCompanyInternet来完成应用程序,但是使用TFS,只有一个VS Solution for Application1.

以下是我们开发应用程序的示例.我们存储在OurCompanyLibrary VS解决方案中的所有域模型和业务规则.当我们开发应用程序时,将其称为Application1,我们首先在OurCompanyLibrary VS Solution下的OurCompanyLibrary.Application1 VS项目中开始创建域模型和业务规则.一旦开发了域模型,我们就会转移到OurCompanyIntranet和OurCompanyInternet VS Solutions中的UI方面.这些解决方案是MVC风格的网站.OurCompanyIntranet包含一个VS Web项目OurCompanyIntranet.UI,其中包含所有视图(.aspx文件),css,javasciprt等.OurCompanyIntranet还包含由应用程序分隔的所有模型和控制器(在本例中为OurCompanyIntranet.Application1).在TFS中组织这个问题成为一个问题,因为我们需要一个Team Project for Application1,但该应用程序可以跨越多个解决方案,我们不希望通过在源代码控制中添加相同的OurCompanyIntranet和OurCompanyInternet VS解决方案来实现重复的代码.

你会如何在TFS中组织这个?我们应该采用另一种方式来组织更有意义的代码结构吗?任何能够引导我们朝着正确方向前进的文章或网站都会有很大帮助.

Noc*_*ock 44

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

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

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

  • 有很多分支(相关与否).
  • 在您需要的最小级别管理源代码管理
  • 使用工作项的区域路径(节点树)将项目拆分为子类别(功能,技术,任何您需要的).通过这种方式,您可以拥有一个大型产品积压或专用积压.
  • 关于整个项目或特定区域的总体报告(仍使用区域路径,但在Reporting Services中)
  • 相信我,这是最好的方式,许多人(包括我第一次)犯了错误,使用多个团队项目,然后必须付出代价.您需要的是一个良好的Source Control层次结构和一个好的Area Path树.

关于解决方案:

为项目的每个主要组件提供一个解决方案并不是一件坏事,开发人员可以在项目的专用子集上工作,以最大限度地提高生产力并减少组件之间的耦合.

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

这里的问题是关于跨组件引用,如果您开发的一个组件(例如Application1)需要您开发的另一个组件(例如OurCompanyLibrary),那么它在两者之间创建依赖关系,Application1必须引用OurCompanyLibrary的"构建组件".

这意味着:

  1. 您必须在源代码管理中的某个位置创建一个位置,以存储将由其他人引用的所有组件的构建程序集.保持构建周期以释放符合正确顺序的所有内容.

  2. 利用Nuget的新标准并设置内部Nuget服务器(非常容易)并为其他人引用的组件构建您自己的Nuget包.

  3. 最简单的方法是在解决方案中包含内部开发的所有依赖项,以确保在需要时构建它们.这很容易,但您的Application1项目将包含大部分VS项目.我不是说这是一个好的或坏的方式,这是你的电话.有时简单的方法是最好的方式.

每种方式都有自己的优点/缺点,只有你可以决定哪一个是最好的.