├── .gitignore
├── DepView
├── App.config
├── DepView.csproj
├── Program.cs
└── Properties
│ └── AssemblyInfo.cs
├── DependencyViewer.sln
├── DependencyViewer
├── AssemblyInformation.cs
├── DependencyViewer.cs
├── DependencyViewer.csproj
├── Extensions.cs
└── Properties
│ └── AssemblyInfo.cs
├── LICENSE
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | build/
21 | bld/
22 | [Bb]in/
23 | [Oo]bj/
24 |
25 | # Visual Studo 2015 cache/options directory
26 | .vs/
27 |
28 | # MSTest test Results
29 | [Tt]est[Rr]esult*/
30 | [Bb]uild[Ll]og.*
31 |
32 | #NUNIT
33 | *.VisualState.xml
34 | TestResult.xml
35 |
36 | # Build Results of an ATL Project
37 | [Dd]ebugPS/
38 | [Rr]eleasePS/
39 | dlldata.c
40 |
41 | *_i.c
42 | *_p.c
43 | *_i.h
44 | *.ilk
45 | *.meta
46 | *.obj
47 | *.pch
48 | *.pdb
49 | *.pgc
50 | *.pgd
51 | *.rsp
52 | *.sbr
53 | *.tlb
54 | *.tli
55 | *.tlh
56 | *.tmp
57 | *.tmp_proj
58 | *.log
59 | *.vspscc
60 | *.vssscc
61 | .builds
62 | *.pidb
63 | *.svclog
64 | *.scc
65 |
66 | # Chutzpah Test files
67 | _Chutzpah*
68 |
69 | # Visual C++ cache files
70 | ipch/
71 | *.aps
72 | *.ncb
73 | *.opensdf
74 | *.sdf
75 | *.cachefile
76 |
77 | # Visual Studio profiler
78 | *.psess
79 | *.vsp
80 | *.vspx
81 |
82 | # TFS 2012 Local Workspace
83 | $tf/
84 |
85 | # Guidance Automation Toolkit
86 | *.gpState
87 |
88 | # ReSharper is a .NET coding add-in
89 | _ReSharper*/
90 | *.[Rr]e[Ss]harper
91 | *.DotSettings.user
92 |
93 | # JustCode is a .NET coding addin-in
94 | .JustCode
95 |
96 | # TeamCity is a build add-in
97 | _TeamCity*
98 |
99 | # DotCover is a Code Coverage Tool
100 | *.dotCover
101 |
102 | # NCrunch
103 | _NCrunch_*
104 | .*crunch*.local.xml
105 |
106 | # MightyMoose
107 | *.mm.*
108 | AutoTest.Net/
109 |
110 | # Web workbench (sass)
111 | .sass-cache/
112 |
113 | # Installshield output folder
114 | [Ee]xpress/
115 |
116 | # DocProject is a documentation generator add-in
117 | DocProject/buildhelp/
118 | DocProject/Help/*.HxT
119 | DocProject/Help/*.HxC
120 | DocProject/Help/*.hhc
121 | DocProject/Help/*.hhk
122 | DocProject/Help/*.hhp
123 | DocProject/Help/Html2
124 | DocProject/Help/html
125 |
126 | # Click-Once directory
127 | publish/
128 |
129 | # Publish Web Output
130 | *.[Pp]ublish.xml
131 | *.azurePubxml
132 | # TODO: Comment the next line if you want to checkin your web deploy settings
133 | # but database connection strings (with potential passwords) will be unencrypted
134 | *.pubxml
135 | *.publishproj
136 |
137 | # NuGet Packages
138 | *.nupkg
139 | # The packages folder can be ignored because of Package Restore
140 | **/packages/*
141 | # except build/, which is used as an MSBuild target.
142 | !**/packages/build/
143 | # Uncomment if necessary however generally it will be regenerated when needed
144 | #!**/packages/repositories.config
145 |
146 | # Windows Azure Build Output
147 | csx/
148 | *.build.csdef
149 |
150 | # Windows Store app package directory
151 | AppPackages/
152 |
153 | # Others
154 | *.[Cc]ache
155 | ClientBin/
156 | [Ss]tyle[Cc]op.*
157 | ~$*
158 | *~
159 | *.dbmdl
160 | *.dbproj.schemaview
161 | *.pfx
162 | *.publishsettings
163 | node_modules/
164 | bower_components/
165 |
166 | # RIA/Silverlight projects
167 | Generated_Code/
168 |
169 | # Backup & report files from converting an old project file
170 | # to a newer Visual Studio version. Backup files are not needed,
171 | # because we have git ;-)
172 | _UpgradeReport_Files/
173 | Backup*/
174 | UpgradeLog*.XML
175 | UpgradeLog*.htm
176 |
177 | # SQL Server files
178 | *.mdf
179 | *.ldf
180 |
181 | # Business Intelligence projects
182 | *.rdl.data
183 | *.bim.layout
184 | *.bim_*.settings
185 |
186 | # Microsoft Fakes
187 | FakesAssemblies/
188 |
189 | # Node.js Tools for Visual Studio
190 | .ntvs_analysis.dat
191 |
192 | # Visual Studio 6 build log
193 | *.plg
194 |
195 | # Visual Studio 6 workspace options file
196 | *.opt
197 |
--------------------------------------------------------------------------------
/DepView/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/DepView/DepView.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {08D77234-C5B2-48EA-9112-16FE67047B89}
8 | Exe
9 | Properties
10 | DepView
11 | DepView
12 | v4.5
13 | 512
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | {95f9a99d-7ee1-4c29-9297-ce5627c41a85}
53 | DependencyViewer
54 |
55 |
56 |
57 |
64 |
--------------------------------------------------------------------------------
/DepView/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DepView
8 | {
9 | class Program
10 | {
11 | static void Main(string[] args)
12 | {
13 | if (args.Length == 0)
14 | {
15 | Console.WriteLine();
16 | Console.WriteLine("Use: DepView ");
17 | Console.WriteLine(" where is the root directory of the .NET assemblies to look through");
18 | }
19 |
20 | if (args.Length >= 1)
21 | {
22 | var info = new DependencyViewer.DependencyViewer(args[0]);
23 | info.DrawTable();
24 | }
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/DepView/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("DepView")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("DepView")]
13 | [assembly: AssemblyCopyright("Copyright © 2015")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("b1d93e22-847a-4b86-af5c-a080b0faf945")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/DependencyViewer.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 2013
4 | VisualStudioVersion = 12.0.21005.1
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DependencyViewer", "DependencyViewer\DependencyViewer.csproj", "{95F9A99D-7EE1-4C29-9297-CE5627C41A85}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DepView", "DepView\DepView.csproj", "{08D77234-C5B2-48EA-9112-16FE67047B89}"
9 | EndProject
10 | Global
11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 | Debug|Any CPU = Debug|Any CPU
13 | Release|Any CPU = Release|Any CPU
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {95F9A99D-7EE1-4C29-9297-CE5627C41A85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {95F9A99D-7EE1-4C29-9297-CE5627C41A85}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {95F9A99D-7EE1-4C29-9297-CE5627C41A85}.Release|Any CPU.ActiveCfg = Release|Any CPU
19 | {95F9A99D-7EE1-4C29-9297-CE5627C41A85}.Release|Any CPU.Build.0 = Release|Any CPU
20 | {08D77234-C5B2-48EA-9112-16FE67047B89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21 | {08D77234-C5B2-48EA-9112-16FE67047B89}.Debug|Any CPU.Build.0 = Debug|Any CPU
22 | {08D77234-C5B2-48EA-9112-16FE67047B89}.Release|Any CPU.ActiveCfg = Release|Any CPU
23 | {08D77234-C5B2-48EA-9112-16FE67047B89}.Release|Any CPU.Build.0 = Release|Any CPU
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | EndGlobal
29 |
--------------------------------------------------------------------------------
/DependencyViewer/AssemblyInformation.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Reflection;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DependencyViewer
9 | {
10 | ///
11 | /// Provides a collection of information that might be useful to know about a .NET assembly
12 | ///
13 | class AssemblyInformation
14 | {
15 | public string Name = string.Empty;
16 | public string File = string.Empty;
17 | public string PublicKey = string.Empty;
18 | public string VersionAsm = string.Empty;
19 | public string VersionFile = string.Empty;
20 | public string VersionProduct = string.Empty;
21 | public string Location = string.Empty;
22 | public string Arch = string.Empty;
23 | public bool DotNetAssembly;
24 | public AssemblyName[] ReferencedAssembliesRaw;
25 | public List ChildAssemblies = new List();
26 | public List ParentAssemblies = new List();
27 | public bool AllResolved = false;
28 | public bool StronglySigned = false;
29 | public string ResolvedNote = string.Empty;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/DependencyViewer/DependencyViewer.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Reflection;
5 | using System.Text;
6 | using System.IO;
7 | using System.Threading.Tasks;
8 | using System.Diagnostics;
9 |
10 | namespace DependencyViewer
11 | {
12 | public class DependencyViewer
13 | {
14 | private Dictionary AsmCollection = new Dictionary();
15 | private string[] Files = { };
16 |
17 | public DependencyViewer(string root)
18 | {
19 | try
20 | {
21 | string[] dlls = Directory.GetFiles(root, "*.dll", SearchOption.AllDirectories);
22 | string[] exes = Directory.GetFiles(root, "*.exe", SearchOption.AllDirectories);
23 |
24 | Files = dlls.Concat(exes).ToArray();
25 |
26 | foreach (var file in Files)
27 | GatherInformation(file);
28 |
29 | FindRelationships();
30 | }
31 | catch (UnauthorizedAccessException ex)
32 | {
33 | Console.WriteLine("One of the paths is inaccessable: " + ex.Message);
34 | }
35 | }
36 |
37 |
38 | private void FindRelationships()
39 | {
40 | foreach (var asm in AsmCollection.Values)
41 | {
42 | if (asm.ReferencedAssembliesRaw == null || asm.ReferencedAssembliesRaw.Count() == 0)
43 | continue;
44 |
45 | asm.AllResolved = true;
46 | foreach (var refasm in asm.ReferencedAssembliesRaw)
47 | {
48 | if (refasm.Name == "mscorlib") continue;
49 | if (refasm.Name == "WindowsBase") continue;
50 | if (refasm.Name == "PresentationCore") continue;
51 | if (refasm.Name == "PresentationFramework") continue;
52 | if (refasm.Name.StartsWith("System")) continue;
53 | if (refasm.Name.StartsWith("Microsoft")) continue;
54 |
55 | if (refasm.GetPublicKeyToken().Length != 0)
56 | {
57 | var found = AsmCollection.Values.FirstOrDefault(i => i.Name == refasm.Name && i.VersionAsm == refasm.Version.ToString());
58 | if (found == null)
59 | {
60 | asm.AllResolved = false;
61 | asm.ChildAssemblies.Add(new AssemblyInformation() { Name = refasm.Name, VersionAsm = refasm.Version.ToString() });
62 | continue;
63 | }
64 |
65 | asm.ChildAssemblies.Add(found);
66 | found.ParentAssemblies.Add(asm);
67 | }
68 | else
69 | {
70 | var found = AsmCollection.Values.FirstOrDefault(i => i.Name == refasm.Name);
71 | if (found == null)
72 | {
73 | asm.AllResolved = false;
74 | asm.ChildAssemblies.Add(new AssemblyInformation() { Name = refasm.Name, VersionAsm = refasm.Version.ToString() });
75 | continue;
76 | }
77 |
78 | if (refasm.Version.ToString() != found.VersionAsm)
79 | asm.ResolvedNote += refasm.Version.ToString() + " -> " + found.VersionAsm;
80 |
81 | asm.ChildAssemblies.Add(found);
82 | found.ParentAssemblies.Add(asm);
83 | }
84 | }
85 | }
86 | }
87 |
88 | public void DrawTable()
89 | {
90 | if (AsmCollection.Count == 0)
91 | {
92 | Console.WriteLine("There are no assemblies to print.");
93 | return;
94 | }
95 |
96 | string[] headings = {
97 | "Assembly Name",
98 | "Ver Asm",
99 | "Ver File",
100 | "Ver Prod",
101 | "", // Architecture
102 | "Signed",
103 | "Resolved",
104 | "Possible Issue",
105 | };
106 |
107 | int[] widths = {
108 | AsmCollection.Values.Max(info => info.Name.Length) + 8, /* padding for indents */
109 | AsmCollection.Values.Max(info => info.VersionAsm.Length),
110 | AsmCollection.Values.Max(info => info.VersionFile.Length),
111 | AsmCollection.Values.Max(info => info.VersionProduct.Length),
112 | AsmCollection.Values.Max(info => info.Arch.Length),
113 | headings[5].Length,
114 | headings[6].Length,
115 | Math.Max(headings[7].Length, AsmCollection.Values.Max(info => info.ResolvedNote.Length))
116 | };
117 |
118 | PrintHorizontal(widths);
119 | PrintRow(headings, widths);
120 | PrintHorizontal(widths);
121 |
122 | foreach (var asm in AsmCollection.Values.Where(i => !i.ParentAssemblies.Any() || i.File.EndsWith("exe")))
123 | PrintAssembly(asm, 0, widths);
124 |
125 | PrintHorizontal(widths);
126 | }
127 |
128 | private void PrintAssembly(AssemblyInformation asm, int level, int[] widths)
129 | {
130 | if (asm.Location.StartsWith(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()))
131 | return;
132 |
133 | string name = "".PadRight(level) + asm.Name;
134 | if (level > 0)
135 | {
136 | name = " ".PadRight(level*"| ".Length-2, "| ") + "\\-" + asm.Name;
137 | }
138 |
139 | string[] values = {
140 | name,
141 | asm.VersionAsm,
142 | asm.VersionFile,
143 | asm.VersionProduct,
144 | asm.Arch,
145 | asm.StronglySigned ? "Signed" : string.Empty,
146 | asm.DotNetAssembly ? (asm.AllResolved ? "Yes" : "No") : string.IsNullOrEmpty(asm.Location) ? string.Empty : "(N/A)",
147 | AsmCollection.Values.Where(i => i.Name == asm.Name).Count() > 1 ? "Dupe Asm" : string.IsNullOrEmpty(asm.Location) ? "Not Found" : asm.ResolvedNote,
148 | };
149 |
150 | PrintRow(values, widths);
151 |
152 | foreach (var refasm in asm.ChildAssemblies)
153 | PrintAssembly(refasm, level + 1, widths);
154 | }
155 |
156 | public void PrintRow(string[] headings, int[] widths)
157 | {
158 | string headers = string.Empty;
159 | for (int i = 0; i < widths.Count(); i++)
160 | headers += "| " + headings[i].PadRight(widths[i] + 1).Substring(0, widths[i] + 1);
161 | headers += "|";
162 | Console.WriteLine(headers);
163 | }
164 |
165 | public void PrintHorizontal(int[] widths)
166 | {
167 | if (widths == null)
168 | return;
169 |
170 | string header = string.Empty;
171 | for (int i = 0; i < widths.Count(); i++)
172 | header += "+".PadRight(widths[i] + 3, '-');
173 | header += "+";
174 |
175 | Console.WriteLine(header);
176 | }
177 |
178 | public void GatherInformation(string file)
179 | {
180 | if (!File.Exists(file))
181 | {
182 | Console.WriteLine("File does not exist: " + file);
183 | return;
184 | }
185 |
186 | var info = new AssemblyInformation();
187 | info.Location = Path.GetDirectoryName(file) + Path.DirectorySeparatorChar;
188 | info.File = Path.GetFileName(file);
189 | info.VersionProduct = FileVersionInfo.GetVersionInfo(file).ProductVersion ?? string.Empty;
190 | info.VersionFile = FileVersionInfo.GetVersionInfo(file).FileVersion ?? string.Empty;
191 |
192 | try
193 | {
194 | info.DotNetAssembly = true;
195 | info.VersionAsm = AssemblyName.GetAssemblyName(file).Version.ToString();
196 | info.Name = AssemblyName.GetAssemblyName(file).Name;
197 | info.StronglySigned = AssemblyName.GetAssemblyName(file).GetPublicKeyToken().Length != 0;
198 | info.Arch = AssemblyName.GetAssemblyName(file).ProcessorArchitecture.ToString();
199 |
200 | var asm = Assembly.LoadFrom(file);
201 | info.ReferencedAssembliesRaw = asm.GetReferencedAssemblies();
202 |
203 | if (!AsmCollection.Keys.Contains(AssemblyName.GetAssemblyName(file).FullName))
204 | AsmCollection.Add(AssemblyName.GetAssemblyName(file).FullName, info);
205 | }
206 | catch (FileLoadException)
207 | {
208 | info.VersionAsm = AssemblyName.GetAssemblyName(file).Version.ToString();
209 | info.Name = AssemblyName.GetAssemblyName(file).Name;
210 | info.StronglySigned = AssemblyName.GetAssemblyName(file).GetPublicKeyToken().Length != 0;
211 | info.Arch = AssemblyName.GetAssemblyName(file).ProcessorArchitecture.ToString();
212 | info.ResolvedNote = "Unable to load";
213 |
214 | if (!AsmCollection.Keys.Contains(AssemblyName.GetAssemblyName(file).FullName))
215 | AsmCollection.Add(AssemblyName.GetAssemblyName(file).FullName, info);
216 | }
217 | catch (BadImageFormatException)
218 | {
219 | info.DotNetAssembly = false;
220 | info.Name = Path.GetFileName(file);
221 | info.VersionAsm = string.Empty;
222 |
223 | if (!AsmCollection.Keys.Contains(file))
224 | AsmCollection.Add(file, info);
225 | }
226 | catch (Exception)
227 | { }
228 | }
229 | }
230 | }
231 |
--------------------------------------------------------------------------------
/DependencyViewer/DependencyViewer.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {95F9A99D-7EE1-4C29-9297-CE5627C41A85}
8 | Library
9 | Properties
10 | DependencyViewer
11 | DependencyViewer
12 | v4.5
13 | 512
14 |
15 |
16 | true
17 | full
18 | false
19 | bin\Debug\
20 | DEBUG;TRACE
21 | prompt
22 | 4
23 |
24 |
25 | pdbonly
26 | true
27 | bin\Release\
28 | TRACE
29 | prompt
30 | 4
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
55 |
--------------------------------------------------------------------------------
/DependencyViewer/Extensions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DependencyViewer
8 | {
9 | public static class Extensions
10 | {
11 | public static string PadRight(this string str, int length, string padding)
12 | {
13 | while (str.Length < length)
14 | str += padding;
15 | return str.Substring(0,length);
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/DependencyViewer/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("DependencyViewer")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("DependencyViewer")]
13 | [assembly: AssemblyCopyright("Copyright © 2015")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("3c191b7a-23d7-4cde-9a11-3204bf82806b")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Stephen Pickett
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Dependency Viewer
2 | Helps find those run-time assembly issues by generating a simple dependency graph
3 |
4 | Summary
5 | ------------
6 | This console application will
7 | - Visually show assembly relationships
8 | - List assembly versions
9 | - List missing assemblies
10 | - Indicate likely assembly binding redirect
11 |
12 | Usage
13 | ----------------
14 | DepView
15 | where [root Path] is the root directory of the .NET assemblies to look through.
16 |
17 | All files with a DLL and EXE extension will be considered, and sub paths will be searched.
18 |
19 | Example Output
20 | ---------------------
21 |
22 | +------------------------------------------------+------------------+------------------+------------------+-------+--------+----------+--------------------------------------+
23 | | Assembly Name | Ver Asm | Ver File | Ver Prod | | Signed | Resolved | Possible Issue |
24 | +------------------------------------------------+------------------+------------------+------------------+-------+--------+----------+--------------------------------------+
25 | | PaintDotNet.SystemLayer.Native.x64.dll | | 3.511.0.0 | 3.511.0.0 | Amd64 | | (N/A) | |
26 | | ShellExtension_x64.dll | | 3.511.0.0 | 3.511.0.0 | | | (N/A) | |
27 | | ShellExtension_x86.dll | | 3.511.0.0 | 3.511.0.0 | | | (N/A) | |
28 | | wiaaut.dll | | 6.2.9200.16384 | 6.2.9200.16384 | | | (N/A) | |
29 | | PaintDotNet.Native.x64.dll | | 3.511.0.0 | 3.511.0.0 | | | (N/A) | |
30 | | PaintDotNet.Native.x86.dll | | 3.511.0.0 | 3.511.0.0 | | | (N/A) | |
31 | | PaintDotNet | 3.511.4977.23448 | 3.511.4977.23448 | 3.511.4977.23448 | MSIL | | Yes | |
32 | | \-PaintDotNet.Base | 3.511.4977.23436 | 3.511.4977.23436 | 3.511.4977.23436 | MSIL | | Yes | |
33 | | \-PaintDotNet.Core | 3.511.4977.23444 | 3.511.4977.23444 | 3.511.4977.23444 | MSIL | | Yes | |
34 | | | \-PaintDotNet.Base | 3.511.4977.23436 | 3.511.4977.23436 | 3.511.4977.23436 | MSIL | | Yes | |
35 | | | \-PaintDotNet.SystemLayer | 3.511.4977.23442 | 3.511.4977.23442 | 3.511.4977.23442 | MSIL | | No | 3.511.4973.33365 -> 3.511.4977.23436 |
36 | | | | \-PaintDotNet.Base | 3.511.4977.23436 | 3.511.4977.23436 | 3.511.4977.23436 | MSIL | | Yes | |
37 | | | | \-Interop.WIA | 1.0.0.0 | 1.0.0.0 | 1.0.0.0 | MSIL | | Yes | |
38 | | | | \-PaintDotNet.SystemLayer.Native.x86 | 3.511.4973.33370 | 3.511.0.0 | 3.511.0.0 | X86 | | No | Unable to load |
39 | | | | \-PaintDotNet.Base | 3.511.4977.23436 | 3.511.4977.23436 | 3.511.4977.23436 | MSIL | | Yes | |
40 | | | | \-PaintDotNet.SystemLayer.Native.x64 | 3.511.4977.23441 | | | | | | Not Found |
41 | | | \-PaintDotNet.Resources | 3.511.4977.23443 | 3.511.4977.23443 | 3.511.4977.23443 | MSIL | | Yes | |
42 | | | | \-PaintDotNet.Base | 3.511.4977.23436 | 3.511.4977.23436 | 3.511.4977.23436 | MSIL | | Yes | |
43 | | | | \-PaintDotNet.SystemLayer | 3.511.4977.23442 | 3.511.4977.23442 | 3.511.4977.23442 | MSIL | | No | 3.511.4973.33365 -> 3.511.4977.23436 |
44 | +------------------------------------------------+------------------+------------------+------------------+-------+--------+----------+--------------------------------------+
45 |
--------------------------------------------------------------------------------