我有兩個答案:我們做什麼和我爲你建議的。
對於我們來說,我們有一套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