Solved

TFS 2010 Folder Structure Recommendations?

Posted on 2014-11-04
3
93 Views
Last Modified: 2015-03-02
Apologies in advance for the long post.  I’m hoping someone can help me get my head around properly designing a TFS folder structure.   We’re a special needs school and we create and maintain a number applications that are used internally by staff primarily for data collection and reporting.  Many of our Visual Studio 2010 solutions reuse common projects.  All solutions use project references where possible and file references in the case of 3rd party libraries where we don’t have the source code.  Up until a couple of weeks ago, our dev team consist of one guy; me.  Source control consisted of zipping projects and using assembly name and version as a file naming convention.  Implementing a real source control system has been on my to do list forever but is something I simply didn’t have the resources, time, or urgent need to do on in a one man shop.

We’ve added a second dev and have been focusing on a TFS 2010 implementation.  We’ve spent the past week+ sifting through the best practices guides including the CodePlex patterns and practices guide, reading countless blogs and StackOverflow posts about recommended folder layouts but there seems to be no simple answer or recommendations about how we should organize our folder structure.  

Most of our VS Solutions use many of the same projects such as those listed in “Common Projects” below. Here’s an example of how our Visual Studio Solutions are laid out.

Common Projects (each of these projects is self-contained in its own folder.):

SplashScreen.csproj
ApplicationUpdater.csproj
TraceLogger.csproj
Win32.csproj
SpellCheckProvider.csproj
IEPDatabaseDAL.csproj
IEPDatabaseEnumGen.csproj


Third Party Assemblies:

DevComponents.DotNetBar2.dll
DevComponents.DotNetBar.Schedule.dll
DeployLX.Licensing.v5.dll
HiQPdf.dll

      
Solutions:

GraphBuilder.sln
          GraphBuilder.csproj
          SplashScreen.csproj (project reference)
          ApplicationUpdater.csproj (project reference)
          TraceLogger.csproj (project reference)
          Win32.csproj (project reference)
          SpellCheckProvider.csproj (project reference)
          DevComponents.DotNetBar2.dll (file reference)
          DeployLX.Licensing.v5.dll (file reference)
          HiQPdf.dll (file reference)

IEPBuilder.sln
          IEPBuilder.csproj
          IEPDatabaseDAL.csproj (project reference)
          IEPDatabaseEnumGen.csproj (project reference)
          SplashScreen.csproj (project reference)
          ApplicationUpdater.csproj (project reference)
          TraceLogger.csproj (project reference)
          Win32.csproj (project reference)
          SpellCheckProvider.csproj (project reference)
          DevComponents.DotNetBar2.dll (file reference)
          DeployLX.Licensing.v5.dll (file reference)
          HiQPdf.dll (file reference)

StepSheetBuilder.sln
          StepSheetBuilder.csproj
          IEPDatabaseDAL.csproj (project reference)
          IEPDatabaseEnumGen.csproj (project reference)
          SplashScreen.csproj (project reference)
          ApplicationUpdater.csproj (project reference)
          TraceLogger.csproj (project reference)
          Win32.csproj (project reference)
          SpellCheckProvider.csproj (project reference)
          DevComponents.DotNetBar2.dll (file reference)
          DeployLX.Licensing.v5.dll (file reference)
          HiQPdf.dll (file reference)

      …

How would we structure our TFS folders to allow solutions to easily use common project references such as those above?  There seems to be many recommendations to include all solutions under a single TFS Team Project.  Does this mean our TFS structure might look like this:

\\MyTfsServer\My Team Projects
          Main
                    CommonProjects
                              SplashScreen
                                        SplashScreen.sln
                                        Source
                                                  SplashScreen.csproj
                                                  Sourcecodefile1.cs
                                                  Sourcecodefile2.cs
                                                  …

                              ApplicationUpdater
                                        ApplicationUpdater.sln
                                        Source
                                                  ApplicationUpdater.csproj
                                                  Sourcecodefile10.cs
                                                  Sourcecodefile20.cs
                                                  …
                    …

                    ThirdParty
                              DevComponents.DotNetBar2
                                        Binaries
                                                  DevComponents.DotNetBar2 v11.2
                                                            DevComponents.DotNetBar2.dll

                                                  DevComponents.DotNetBar2 v12.0
                                                            DevComponents.DotNetBar2.dll

                              DeployLX.Licensing
                                        Binaries
                                                  DeployLX.Licensing.v4 r9876
                                                            DeployLX.Licensing.v4.dll

                                                  DeployLX.Licensing.v5 r2468
                                                            DeployLX.Licensing.v5.dll

                                                  DeployLX.Licensing.v5 r5858
                                                            DeployLX.Licensing.v5.dll

                     Applications
                              GraphBuilder
                                        GraphBuilder.sln (Solution includes project references to projects in CommonProjects
                                        folder and file references to assemblies in ThirdParty folder
                                       
                                        Source
                                                  GraphBuilder.csproj
                                                  MainForm.cs
                                                  MainForm.Designer.cs                                        
                                                  MainForm.resx
                                                  Sourcecodefile123.cs
                                                  Sourcecodefile456.cs
                                                  …

                              IEPBuilder
                                        IEPBuilder.sln  (Solution includes project references to projects in CommonProjects
                                        folder and file references to assemblies in ThirdParty folder
                                       
                                        Source
                                                  IEPBuilder.csproj
                                                  MainForm.cs
                                                  MainForm.Designer.cs                                        
                                                  MainForm.resx
                                                  Sourcecodefile789.cs
                                                  SourcecodefileABC.cs
                                                  …

Are we in the right ball park here? If not, can someone recommend how we might set up our folder structure?

Thanks -- Steve
0
Comment
Question by:SteveV
  • 2
3 Comments
 

Author Comment

by:SteveV
ID: 40431608
Anyone?
0
 
LVL 28

Accepted Solution

by:
Ryan McCauley earned 500 total points
ID: 40456628
The only difference between what you're recommending and what I do is that I include a "Development" folder in each project for main trunk development, and then I can branch into another folder if I need to get a version of something ready for release while not halting development on the trunk. This may not apply to you, but here's what it looks like for me:

$
 - Projectname
   - Development (SLN  file goes here)
     - Sub project 1
     - Sub project 2
   - v1.0
     - Sub project 1
     - Sub project 2

I know you can just label a release and move on, but I like having easy access to the code that was associated with a particular release, and if I need to do some debugging or patch a build when main development is full of half-implemented features, it just makes it really easy (and I don't have to mess with fetching a previous version mapped to a different folder, then what do I do with code changes?).

Other than that, I think your layout is great and looks remarkably similar the one I use without any issues.
0
 

Author Closing Comment

by:SteveV
ID: 40639979
Sorry for the delay in marking this as the excepted answer.  For some unknown reason I stopped getting notification emails from EE and assumed the question had gone unanswered.  The only issue with the layout in my original post is that there's no way to isolate the "Common Components" projects such that source code changes won't impact the solutions that consume them.  Ultimately, we chose to include the "Common Components" projects in the "Main" tree.  The huge down side is that if we want to branch an application, we branch the entire "Main" tree and cloak the folders we don't need.  This is a major PITA but is the only way we could figure out how to isolate code changes in the common components.  

It really would be helpful if MS were to provide some realistic scenarios along with guidance on how to best structure folders based on those scenarios.  There's a pretty big need for this kind of guidance based on the huge number of times the "TFS 2010 Folder Structure Recommendations" question gets asked.

Thanks for the help -- Steve
0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Windows Drag & Drop Location 2 85
SignTool Error with Windows 10 5 96
Problem to adjust sheet 1 81
Dreamweaver server behavior gone 6 73
In this article, I will show how to use the Ribbon IDs Tool Window to assign the built-in Office icons to a ribbon button.  This tool will help us to find the OfficeImageId that corresponds to our desired built-in Office icon. The tool is part of…
For most people, the WrapPanel seems like a magic when they switch from WinForms to WPF. Most of us will think that the code that is used to write a control like that would be difficult. However, most of the work is done by the WPF engine, and the W…
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now