A Pretty Picture of Our Project Dependencies


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 ]


Comments (8)

  1. Lucas C says:

    The three boxes in the middle? Well, Lets take Lutz Roeder’s "Reflector" to the rescue.

    I see more than 5 assemblies related to MsBuild in my .Net directory, but working from the assumption that one of the two deployed assemblies that are *not* in the middle is Msbuild.exe, my guess would be as follows:

    Box 25 (which is referenced by all others) is Microsoft.Build.Framework.dll.

    Boxes 17 and 12 (I can’t determine which one is which) are Microsoft.Build.Utilities.dll and Microsoft.Build.Engine.dll.

    That leaves as a guesstimate for boxes 2 and 3 that they are Msbuild.exe and Microsoft.Build.Tasks.dll (again, order is unknown; msbuild.exe is the one referencing Microsoft.Build.Engine.dll, the tasks dll references Microsoft.Build.Utilities.dll)

  2. Mike Fourie says:

    Ding ding ding! We have a winner! Nicely done, Lucas, that’s exactly what they are. I’ll have to double-check on 2 and three tomorrow on the diagram with names, but I believe you’re correct on those as well.

    Neil

  3. Diego Vega says:

    Neil, Didn’t you finish with the clean up? I am ready to use this when you make it available. Thanks.

  4. Larcik-vh says:

    <a href= http://dypatu.com >khleo thomas -er forgive and forget video</a> [url=http://dypatu.com]khleo thomas -er forgive and forget video[/url]

  5. birkoff_[!2] says:

    <a href= http://index1.ghlpof.com >hancock co. tn pneumonia deaths in 1900</a> <a href= http://index3.ghlpof.com >fat mature tgp</a> <a href= http://index5.ghlpof.com >ny state civil confinement law for sex offenders</a> <a href= http://index2.ghlpof.com >chevy 20ridin 20hot 20boy 20music 20video 20code</a> <a href= http://index4.ghlpof.com >extras for movies</a>

  6. birkoff_[!2] says:

    <a href= http://index1.ghlpof.com >hancock co. tn pneumonia deaths in 1900</a> <a href= http://index3.ghlpof.com >fat mature tgp</a> <a href= http://index5.ghlpof.com >ny state civil confinement law for sex offenders</a> <a href= http://index2.ghlpof.com >chevy 20ridin 20hot 20boy 20music 20video 20code</a> <a href= http://index4.ghlpof.com >extras for movies</a>

  7. collinsauve says:

    I’m looking for a program that does exactly this! Ever thought of distributing it?