我们的.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正是我们想要的,我们真的想找到解决这个问题的方法.
还有其他人面对这个并提出解决方案吗?
如果你看过一篇文章或发帖,你可以与我分享,那也会有所帮助.
像往常一样,我对这样的答案持开放态度,"你看错了,傻瓜,这就是它应该做的事情.
我觉得这里有一些误解.首先,您可以在单个TFS项目中拥有多个(尽可能多的)解决方案.此外,单个Visual Studio项目可以包含任意数量的解决方案.
第二,你使用的是什么版本的TFS?2010年与2005/08年度的TFS项目处理方式不同.
在2008年,有几种方法可以解决这个问题,具体取决于你想要从中得到什么.您可以拥有多个TFS项目或单个TFS项目.
我将从多个开始.
为您的共享库类型代码设置TFS项目,为您拥有的每个常规项目设置其他项目.作为此共享库的开发过程的一部分,请检入已完成的程序集.然后将这些程序集分支到您想要使用它们的任何其他TFS项目中.当您对共享库执行功能更新或错误修复时,只需将分支合并到您希望更新进入的任何其他TFS项目中.
这使您可以为单个应用程序进行共享更改,而无需推送所有应用程序.
如果您想要一个包含所有内容的TFS项目,只需为每个所需的Visual Studio项目添加文件夹即可.visual studio解决方案可以毫无问题地返回基础树之外的项目.现在,在为每个解决方案配置Builds之类的内容时,请确保限制构建服务器从/ watch中获取的目录.这样,在对外部站点进行更改时,您无法构建其中一个内部站点.