Aquí hay un código rápido para mostrar el caso de la Cecil Library para hacer esto:
public static void PoC(IEnumerable<AssemblyDefinition> assemblies, TextWriter writer)
{
Console.WriteLine("digraph Dependencies {");
var loaded = assemblies
.SelectMany(a => a.Modules.Cast<ModuleDefinition>())
.SelectMany(m => m.AssemblyReferences.Cast<AssemblyNameReference>().Select(a => a.Name + ".dll"))
.Distinct()
.Select(dllname => {
try { return AssemblyFactory.GetAssembly(dllname); }
catch { return null; } })
.Where(assembly => assembly != null)
.ToList();
loaded.ForEach(a => a.MainModule.FullLoad());
loaded.ForEach(a =>
{
foreach (var r in a.MainModule.AssemblyReferences.Cast<AssemblyNameReference>())
Console.WriteLine(@"""{0}"" -> ""{1}"";", r.Name, a.Name.Name);
});
Console.WriteLine("}");
}
genera un dot
graph file. La ejecución de este en un bastante simples resultados del proyecto en:

corriendo en un proyecto un poco menos sencilla regresaron esto:

Puede ser recomendable para filtrar ciertos montajes (.StartsWith("System.")
?) y/o limitar la profundidad de búsqueda, etc.
Gracias por todas las sugerencias. Ya tenemos NDepend en uso para Code Metrix/cheques de calidad de código, pero hasta ahora no me había dado cuenta de que también puede crear un gráfico de dependencia de código. Lo he probado y funciona como un encanto. ¡Es exactamente lo que necesitaba! – SvenG