我有两个答案:我们做什么和我为你建议的。
对于我们来说,我们有一套Web应用程序,它们都拥有很多共享组件。因此,虽然这是大约50个不同的程序集(VS Projects)和5-10个解决方案(取决于你如何看待它),但它们之间存在非常显着的重叠,这意味着我们想要使用TFS per-dev合并比分支和合并那些重叠的资源。因此,我们实际上将所有这些都保存在一个TFS项目中。下面是我们如何有我们的设置(改为有意义的名字给你):
"Official Projects" (Collection)
"Production Applications" (Project)
"Technology Proof of Concepts" (Project)
"Reference Projects" (Project) - this is a simple solution/projects using our architecture to make our architecture easier to understand as people join our team. Other reference apps will go here in the future.
"TFS Configuration" (Project)
"Playground" (Collection)
"John Doe" (Project)
"Jane Doe" (Project)
"Security Team" (Project)
"Production Test" (Project)
在我们的设置,我们有正式的公司代码的地方。另外,我们有一个区域可以让人们不用担心会搞乱任何东西,而能够利用各种与TFS相关的好处。
但是,在你的情况下,如果我正确阅读各行,我会建议一些不同的东西。我的假设:
- 每个项目,除了有一些常见的程序集(我在考虑日志记录,安全性以及公司范围内共享的其他实用程序程序集)之外,都是不相关的项目。
- 共享/常用程序集并不会经常更改,因此您可以使用DLL引用而不是项目引用,因为您始终使用最新的最新/最新/日版代码。
- (基于TFS的假设,因为我仍然在学习)您可以跨同一集合中的各个项目进行分支,但是您无法跨集合进行分支。
- 除了上述共享程序集之外,其他代码不会在团队间共享。
因此,与这些假设,我会去像这样的东西:
"Common Resources" (Collection)
"Source" (Project) - everything goes here such as logging assemblies, security assemblies, etc.
"Version 1" (Project) - Branch as you "rev" your common assemblies so people have access to older versions.
"Version 2" (Project)
"Version 3" (Project"
etc.
"Team 1" (Collection)
"Project 1"
"Project 2"
"Project 3"
"Project 4"
"Project 5"
"Team 2" (Collection)
"Project 1"
"Project 2"
"Project 3"
"Team 3" (Collection)
"Project 1"
"Project 2"
etc.
这样做,这样,你通过DLL引用是指共同的组件。作为团队或开发人员,您可以决定何时开始使用较新版本的常规装配。要做到这一点,您只需在该版本的分支上获取最新信息,然后添加对其的引用。如果我的假设#3错了,那么希望你能做得比那更好。否则,每个项目都有自己的空间(可以包含不止一个VS解决方案/项目,这是一个好主意),并且您的团队拥有自己的收藏,以与其他团队分开。
只要我的$ 0.02值...
您是否可以更新结构以指示.sln和.csproj文件的位置?我目前有一个场景,其中每个可部署项目(Windows服务或Web应用程序)都有解决方案,并且每个解决方案都可以依赖于解决方案中的项目(例如,一个解决方案中的接口项目由另一个解决方案中的另一个项目)。你的建议是否迎合了这个?我们目前在构建到已知位置时手动复制可分发程序集,并预先构建我们在依赖项中复制的其他项目并引用副本。 – jamiebarrow 2011-08-03 16:03:51