{"id":789,"date":"2017-06-23T11:31:58","date_gmt":"2017-06-23T10:31:58","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=789"},"modified":"2019-10-11T10:04:38","modified_gmt":"2019-10-11T09:04:38","slug":"net-dependency-tree","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/net-dependency-tree\/","title":{"rendered":".Net Dependency Tree"},"content":{"rendered":"\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing Newtonsoft.Json.Linq;\n\nnamespace DependencyTree {\n    class Program {\n        public static HashSet&lt;string> ProcessedAssemblies = new HashSet&lt;string> ();\n\n        public static JObject GetDependencies (List&lt;string> messages, Assembly assembly) {\n            var tree = new JObject ();\n            ProcessedAssemblies.Add (assembly.FullName);\n\n            tree.Add (\"Name\", new JValue (assembly.GetName ().Name));\n            tree.Add (\"FullName\", new JValue (assembly.FullName));\n\n            var assemblies = assembly.GetReferencedAssemblies ();\n            var references = new JArray ();\n            tree.Add (\"references\", references);\n            if (assemblies.GetLength (0) > 0) {\n                foreach (var refAssembly in assemblies) {\n                    if (!ProcessedAssemblies.Contains (refAssembly.FullName)) {\n                        var fileName = Path.GetFullPath (refAssembly.Name + \".dll\");\n                        \/\/messages.Add(String.Format(\"Checking for assembly: {0}\", fileName));\n                        if (File.Exists (fileName)) {\n                            try {\n                                var referencedAssembly = Assembly.LoadFile (fileName);\n                                references.Add (GetDependencies (messages, referencedAssembly));\n                            } catch (Exception e) {\n                                messages.Add (String.Format (\"An exception occurred: {0}\", e.Message));\n                                references.Add (new JValue (refAssembly.FullName));\n                            }\n                        } else {\n                            references.Add (new JValue (refAssembly.FullName));\n                        }\n                    } else {\n                        references.Add (new JValue (refAssembly.FullName));\n                    }\n                }\n            }\n            return tree;\n        }\n\n        static int Main (string[] args) {\n            if (args.GetLength (0) &lt; 1) {\n                Console.WriteLine (\"Add a single parameter that is your path to the file you want inspected.\");\n                return 1;\n            }\n\n            var messages = new List&lt;string> ();\n            try {\n                var assembly = Assembly.LoadFile (Path.GetFullPath (args[0]));\n                var obj = GetDependencies (messages, assembly);\n                File.WriteAllText (\"DependencyTree.json\", obj.ToString ());\n            } catch (Exception e) {\n                messages.Add (String.Format (\"An exception occurred: {0}\", e.Message));\n            }\n            File.WriteAllText (\"DependencyTreeMessages.txt\", String.Join (\"\\n\", messages));\n\n            return 0;\n        }\n    }\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-789","post","type-post","status-publish","format-standard","hentry","category-dotnet"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/789","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=789"}],"version-history":[{"count":2,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/789\/revisions"}],"predecessor-version":[{"id":2661,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/789\/revisions\/2661"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=789"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}