using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using Newtonsoft.Json.Linq;
namespace DependencyTree {
class Program {
public static HashSet<string> ProcessedAssemblies = new HashSet<string> ();
public static JObject GetDependencies (List<string> messages, Assembly assembly) {
var tree = new JObject ();
ProcessedAssemblies.Add (assembly.FullName);
tree.Add ("Name", new JValue (assembly.GetName ().Name));
tree.Add ("FullName", new JValue (assembly.FullName));
var assemblies = assembly.GetReferencedAssemblies ();
var references = new JArray ();
tree.Add ("references", references);
if (assemblies.GetLength (0) > 0) {
foreach (var refAssembly in assemblies) {
if (!ProcessedAssemblies.Contains (refAssembly.FullName)) {
var fileName = Path.GetFullPath (refAssembly.Name + ".dll");
//messages.Add(String.Format("Checking for assembly: {0}", fileName));
if (File.Exists (fileName)) {
try {
var referencedAssembly = Assembly.LoadFile (fileName);
references.Add (GetDependencies (messages, referencedAssembly));
} catch (Exception e) {
messages.Add (String.Format ("An exception occurred: {0}", e.Message));
references.Add (new JValue (refAssembly.FullName));
}
} else {
references.Add (new JValue (refAssembly.FullName));
}
} else {
references.Add (new JValue (refAssembly.FullName));
}
}
}
return tree;
}
static int Main (string[] args) {
if (args.GetLength (0) < 1) {
Console.WriteLine ("Add a single parameter that is your path to the file you want inspected.");
return 1;
}
var messages = new List<string> ();
try {
var assembly = Assembly.LoadFile (Path.GetFullPath (args[0]));
var obj = GetDependencies (messages, assembly);
File.WriteAllText ("DependencyTree.json", obj.ToString ());
} catch (Exception e) {
messages.Add (String.Format ("An exception occurred: {0}", e.Message));
}
File.WriteAllText ("DependencyTreeMessages.txt", String.Join ("\n", messages));
return 0;
}
}
}
78900cookie-check.Net Dependency Tree