As you may have noticed from our recent posts on build parallelization, we're thinking a lot lately about project dependencies. One thing I've always wanted is a tool that let me visually look at the project-to-project references that make up my application.

A couple of weekends ago I hacked together an application that uses the MSBuild Object Model and the Visio ActiveX control to give a visual representation of managed project-to-project references. It was nuts. I haven't had to deal with graphs and recursion and such since I did 62:206 Fundamentals of Data Structures in Pascal back in school. But, with much noodling and debugging with pen and paper I got it working. After I clean it up a bit we'll be posting it to gotdotnet for others to play with.

Here's a picture of what the dependency graph looks like for MSBuild (it takes up too much screen space to link to directly). Each box in the diagram represents a single .csproj file. The number inside the box is the count of people that depend on the project.

Looking at the diagram you can pretty quickly see that we use test-driven development. Each of the shipping components has an equivalent project that implements its unit tests. You can also see that we have very few projects that result in actual shipping code. A lot of the projects are internal tools used for conversion, or incubation efforts around new technology. You'll also notice that even for non-shipping internal code we have unit tests.

The biggest thing to notice, however, is the three boxes in the middle highlighted with red. Pretty much everything we build depends on them. Any guesses as to what three assemblies are generated by those three projects?

[ Author: Neil Enns ]