Hi, this is pretty much the same problem as I had :)

Our solution is as follows (and comes straight from one of the Ms solution
development centre (SDC) who we had in for consultancy on precisely this
problem so I guess they use it too):

* System Solution containing all projects - used for daily (overnight)
builds
* Subsystem Solutions containing _project_ references to all projects
required by the subsystem
* [1]In each subsystem solution have a debug build that only builds the
projects in that subsystem and doesn't rebuild the referenced system.
* In each subsystem solution have a NUnit build that only builds the project
files required for the unit tests and runs the tests.
* Strict design rules about which subsystem can reference another.
* A coffee machine that takes 1/2 hour to make 1 cup of coffee for when you
really do have to build everything ;)

The problem with file references is that it is very hard to make sure you
are referencing the correct build (debug/release) and if you bump the build
numbers daily this can also lead to issues.

Don't keep binaries in sourcesafe.  VSS can't tell the difference between 1
binary and the next so it stores the ENTIRE file every time you check it in.
VSS has real problems when it gets over 4gb and daily builds (or more often
if you run the script on demand) will chew up 4gb in no time at all.

I use buildit with a slightly modified config file to build the entire
solution on dev boxes overnight/on demand and use the coffee machine at this
point :)

The advantage of using the different build configurations is that Buildit
(and possibly Nant) can build them too.  This is particularly good for doing
a nightly Nunit build and running the results to file so you can check that
not only do you have a build but it smoke tests and unit tests ok as well
before doing a final build for deployment to staging without unit test code
or even as release.

It does take time to get this setup and working properly but it is well
worth it.  But you already know that.

Hope this helps

James

[1] I have assumed that you are familiar with managing your own build
configs using the configuration manager, however in case you haven't used it
right click on the solution and choose configuration manager.
Use the active solution configuration dropdown to create a new build config
for the solution.
Use the new option in the configuration column to create a new build
configuration for the selected _project_.  You will need to do this for
projects that you don't want to build in this config as well so you can
uncheck the "build" option otherwise visual studio will leave the project on
its current build.  You can then quickly change which build you want in the
toolbar if you want.


-----Original Message-----
From: Jesse Sanders [mailto:[EMAIL PROTECTED]
Sent: 27 July 2004 17:59
To: [EMAIL PROTECTED]
Subject: [ADVANCED-DOTNET] Large solutions and references

All,

I am the technical lead on an application with ~216,000 lines of VB.NET
code with 4 developers.  The solution currently consists of 61 projects,
all loaded at once with project references.  The solution can be
logically divided into 7 subsystems where each subsystem consists of
web, business, data, interface, NUnit, and NUnitASP projects (6 separate
projects).  There are ~20 helper projects used by the subsystems (MVC,
MS DataAccessLayer, Event Logging, etc).

The obvious problem that arises is that compiling entire project takes
too long.  When we originally started this project, we had to switch to
this reference model because we experienced too many problems going with
straight local file references.  This problem was largely caused our
inexperience with .NET referencing issues.  Now we find it cumbersome to
load 61 projects and compile all of them each time we run the
application in debug mode.

The proposed idea is to use project references within each subsystem and
use file references for references external to the subsystem.  This
would allow developers to load just the subsystem they are working on
which would reduce the number of projects loaded from 61 to about 6.
After reading several of Microsoft and DevX articles on the subject,
this seems to be the best solution to our problem and would make this
more manageable.  We are setting up a build server to build all the
projects every night (on demand as well) and then the debate comes up
about what to do with the build files.  I am leaning towards taking the
debug build and adding them to VSS (check out, copy, check back in), so
that the file references will be local for each developer and they will
get latest from VSS on the build folder to get the latest version.

On the other hand, I could host the build files on a network share and
point the file references to that share.  The reason I am leaning
towards going local with the files is that I have noticed that VSS will
allow a developer to step into a file referenced debug build of a DLL.
This makes life easier for developers to debug code when crossing
subsystems or accessing one of the helper DLLs.  Any reason I shouldn't
do this?  The articles I have seen all point towards using the network
share, but if I can help my developers debug across the subsystem, then
I think it would be to their benefit.

Am I going about this the right way?  Does anyone have real world
experience working with a solution this large with lots of cross
subsystem dependencies?  Any insight on the subject is appreciated.

As for the builds, I am proposing that we use BuildIt or NAnt to perform
the nightly builds.  Does anyone have any thoughts on how to manage the
build order with a solution this large?  Any thoughts on one build tool
over the other?

I miss the old days of vb6 when you made your reference and if the
project was loaded, you could step right into it... but then again, I
don't miss DLL hell and registry problems... LOL

Thanks,

Jesse

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com
Some .NET courses you may be interested in:


>>> Error in line 15 of ADVANCED-DOTNET.MAILTPL: unknown formatting command
<<<
 -> .NET Architecture and Design: Designing Distributed Applications with <-

===================================
This list is hosted by DevelopMentorŪ  http://www.develop.com
Some .NET courses you may be interested in:

Essential .NET: building applications and components with CSharp
August 30 - September 3, in Los Angeles
http://www.develop.com/courses/edotnet

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to