TFS和多个解决方案中的共享项目

时间:2010-05-19 15:08:26

标签: tfs

我们的.NET团队致力于为我们公司制作属于不同类别的项目。一些是内部Web应用程序,一些是外部(面向公众)的Web应用程序,我们还为公司办公室用户提供内部Windows应用程序,为我们的零售点(商店)提供Windows Forms应用程序。当然,因为我们讨厌代码重用,所以我们有大量代码在不同的应用程序之间共享。目前我们正在使用SVN作为源代码控制,我们的存储库布局如下:

 - = folder, | = Visual Studio Solution
-SVN
   - Internet
      | Ourcompany.com
      | Oursecondcompany.com
   - Intranet
      | UniformOrdering website
      | MessageCenter website
   - Shared
      | ErrorLoggingModule
      | RegularExpressionGenerator
      | Anti-Xss
      | OrgChartModule etc...

所以......

Internet文件夹中的OurCompany.com解决方案将包含一个网站项目,它还包括共享目录中的ErrorLoggingModule,RegularExpressionGenerator和Anti-Xss项目。

同样,我们的UniformOrdering网站解决方案也会将每个项目都纳入解决方案。

我们更喜欢对.dll引用进行项目引用,因为首先,如果我们需要在OurCompany.com网站上添加或修复ErrorLoggingModule中的函数,它就在那里。此外,这允许我们构建每个解决方案,并查看共享代码的更改是否会破坏任何其他应用程序。如果我是正确的,这应该在构建服务器上运行良好。

在SVN中,没有问题。 SVN和Visual Studio没有像TFS的源代码控制那样捆绑在一起。我们在使用TFS时从未想过如何在TFS中使用这种类型的结构,因为在TFS中,TFS项目总是与Visual Studio解决方案绑定。源代码存储库是TFS项目的子代,因此如果我们想要这样做,我们必须复制每个TFS项目的源代码存储库中的共享代码。正如我的同事所说,这“打破了所有关于代码重用和简单性的最佳实践”。我们切换到SVN已经足够成功了。

然而,现在,我们面临着真正修复我们的开发流程,TFS的应用程序生命周期管理非常接近我们想要的,以及我们想要如何工作。我们的一个关键点是共享代码问题。

我们正在评估其他商业和开源解决方案,但由于我们已经使用我们的MSDN订阅支付了TFS,而且TFS正是我们想要的,我们真的想找到解决这个问题的方法。

还有其他人遇到过这个并提出解决方案吗?

如果您看过一篇文章或发帖,可以与我分享,那也会有所帮助。

与往常一样,我愿意接受这样的答案:“你看错了所有,笨蛋,这就是它应该完成的方式。”

2 个答案:

答案 0 :(得分:15)

我认为这里存在一些误解。首先,您可以在单个TFS项目中拥有多个(尽可能多的)解决方案。此外,单个Visual Studio项目可以包含任意数量的解决方案。

其次,您使用的是什么版本的TFS? 2010年与2005/08年度在处理TFS项目方面有所不同。

2008年,有几种方法可以解决这个问题,具体取决于您希望从中获得什么。您可以拥有多个TFS项目或单个TFS项目。

我将从多个开始。

为您的共享库类型代码设置TFS项目,为您拥有的每个常规项目设置其他项目。作为此共享库的开发过程的一部分,请检入已完成的程序集。然后将这些程序集分支到您想要使用它们的任何其他TFS项目中。当您对共享库执行功能更新或错误修复时,只需将分支合并到您希望更新进入的任何其他TFS项目中。

这使您可以为单个应用程序进行共享更改,而无需推送所有应用程序。

如果您想要一个包含所有内容的TFS项目,只需为您想要的每个Visual Studio项目添加文件夹。 visual studio解决方案可以毫无问题地返回基础树之外的项目。现在,在为每个解决方案配置Builds之类的内容时,请确保限制构建服务器从/ watch中获取的目录。这样,在对外部站点进行更改时,您就无法构建其中一个内部站点。

答案 1 :(得分:4)

只记录这个,希望有一天能帮助别人,我担心我回答原来的问题有点太晚了;) 我们的情况非常相似,您的问题(以及后续答案)使我们可以很容易地正确设置TFS。

使用您的示例来解释我们的设置:

# = Project Collection, > = Team Project, | = VS project
# SVN
    > Internet
        | OurCompany
        | OurCompany2
    > Intranet
        | UniformOrdering
        | MessageCentre
    > Shared
        | ErrorLogging
        | RegularExpression

这意味着可以将工作(使用Sharepoint中的Scrum模板)分配给任何团队项目(在我们的案例中是SAAS应用程序),开发人员可以选择打开任何或所有VS项目来获得工作完成。

大多数高级开发人员(跨多个产品的开发人员)都有一个VS解决方案(可能是“WholeEnterprise.sln”继续进行类比),其中包含所有不同的VS项目,因此可以在任何/所有项目上工作在任何时候。我们还可以确保项目正确构建,并且在推送更新之前所有依赖项都是最新的。

您所选择的操作系统中的结构完全取决于您!我们中的一些人已经复制了TFS的结构,其他人有一个完全平坦的层次结构......这似乎在一天结束时没有任何区别。