├── .gitignore
├── .nuget
├── NuGet.Config
├── NuGet.exe
└── NuGet.targets
├── DGMLWriter.cs
├── DependencyViewModel.cs
├── DgmlColorConfiguration.cs
├── GraphHelper.cs
├── GraphVizColorConfiguration.cs
├── GraphVizNodeExtensions.cs
├── GraphvizWriter.cs
├── IColorConfiguration.cs
├── IPackageWriter.cs
├── NuGetPackageVisualizer.csproj
├── NuGetPackageVisualizer.nuspec
├── NuGetPackageVisualizer.sln
├── PackageViewModel.cs
├── Program.cs
├── Properties
└── AssemblyInfo.cs
├── README.md
├── Service References
└── NuGetService
│ ├── Reference.cs
│ ├── Reference.datasvcmap
│ └── service.edmx
├── app.config
├── example.png
├── license.txt
├── packages.config
└── projectExample.PNG
/.gitignore:
--------------------------------------------------------------------------------
1 | # Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
2 | [Bb]in/
3 | [Oo]bj/
4 |
5 | # mstest test results
6 | TestResults
7 |
8 | ## Ignore Visual Studio temporary files, build results, and
9 | ## files generated by popular Visual Studio add-ons.
10 |
11 | # User-specific files
12 | *.suo
13 | *.user
14 | *.sln.docstates
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Rr]elease/
19 | x64/
20 | *_i.c
21 | *_p.c
22 | *.ilk
23 | *.meta
24 | *.obj
25 | *.pch
26 | *.pdb
27 | *.pgc
28 | *.pgd
29 | *.rsp
30 | *.sbr
31 | *.tlb
32 | *.tli
33 | *.tlh
34 | *.tmp
35 | *.log
36 | *.vspscc
37 | *.vssscc
38 | .builds
39 |
40 | # Visual C++ cache files
41 | ipch/
42 | *.aps
43 | *.ncb
44 | *.opensdf
45 | *.sdf
46 |
47 | # Visual Studio profiler
48 | *.psess
49 | *.vsp
50 | *.vspx
51 |
52 | # Guidance Automation Toolkit
53 | *.gpState
54 |
55 | # ReSharper is a .NET coding add-in
56 | _ReSharper*
57 |
58 | # NCrunch
59 | *.ncrunch*
60 | .*crunch*.local.xml
61 |
62 | # Installshield output folder
63 | [Ee]xpress
64 |
65 | # DocProject is a documentation generator add-in
66 | DocProject/buildhelp/
67 | DocProject/Help/*.HxT
68 | DocProject/Help/*.HxC
69 | DocProject/Help/*.hhc
70 | DocProject/Help/*.hhk
71 | DocProject/Help/*.hhp
72 | DocProject/Help/Html2
73 | DocProject/Help/html
74 |
75 | # Click-Once directory
76 | publish
77 |
78 | # Publish Web Output
79 | *.Publish.xml
80 |
81 | # NuGet Packages Directory
82 | packages
83 |
84 | # Windows Azure Build Output
85 | csx
86 | *.build.csdef
87 |
88 | # Windows Store app package directory
89 | AppPackages/
90 |
91 | # Others
92 | [Bb]in
93 | [Oo]bj
94 | sql
95 | TestResults
96 | [Tt]est[Rr]esult*
97 | *.Cache
98 | ClientBin
99 | [Ss]tyle[Cc]op.*
100 | ~$*
101 | *.dbmdl
102 | Generated_Code #added for RIA/Silverlight projects
103 |
104 | # Backup & report files from converting an old project file to a newer
105 | # Visual Studio version. Backup files are not needed, because we have git ;-)
106 | _UpgradeReport_Files/
107 | Backup*/
108 | UpgradeLog*.XML*DotSettings
109 | /.vs/NuGetPackageVisualizer/v15/Server/sqlite3
110 |
--------------------------------------------------------------------------------
/.nuget/NuGet.Config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.nuget/NuGet.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasArdal/NuGetPackageVisualizer/f34be4797988137dba52cf96d6b04b06b85c2b9a/.nuget/NuGet.exe
--------------------------------------------------------------------------------
/.nuget/NuGet.targets:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $(MSBuildProjectDirectory)\..\
5 |
6 |
7 | false
8 |
9 |
10 | false
11 |
12 |
13 | true
14 |
15 |
16 | false
17 |
18 |
19 |
20 |
21 |
25 |
26 |
27 |
28 |
29 | $([System.IO.Path]::Combine($(SolutionDir), ".nuget"))
30 | $([System.IO.Path]::Combine($(ProjectDir), "packages.config"))
31 |
32 |
33 |
34 |
35 | $(SolutionDir).nuget
36 | packages.config
37 |
38 |
39 |
40 |
41 | $(NuGetToolsPath)\nuget.exe
42 | @(PackageSource)
43 |
44 | "$(NuGetExePath)"
45 | mono --runtime=v4.0.30319 $(NuGetExePath)
46 |
47 | $(TargetDir.Trim('\\'))
48 |
49 | -RequireConsent
50 |
51 | $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch) -solutionDir "$(SolutionDir) "
52 | $(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols
53 |
54 |
55 |
56 | RestorePackages;
57 | $(ResolveReferencesDependsOn);
58 |
59 |
60 |
61 |
62 | $(BuildDependsOn);
63 | BuildPackage;
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
86 |
87 |
90 |
91 |
92 |
93 |
95 |
96 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
147 |
148 |
149 |
150 |
--------------------------------------------------------------------------------
/DGMLWriter.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Diagnostics;
3 | using System.Linq;
4 | using System.Xml.Linq;
5 |
6 | namespace NuGetPackageVisualizer
7 | {
8 | public class DGMLWriter : IPackageWriter
9 | {
10 | public void Write(List packages, string file)
11 | {
12 | if (string.IsNullOrWhiteSpace(file))
13 | {
14 | file = "packages.dgml";
15 | }
16 |
17 | Debug.WriteLine($"Writing {file}.");
18 |
19 | XNamespace ns = "http://schemas.microsoft.com/vs/2009/dgml";
20 | var colors = new DgmlColorConfiguration();
21 | var nodes =
22 | packages
23 | .Select(
24 | package =>
25 | new XElement(ns + "Node",
26 | new XAttribute("Id", package.Id),
27 | new XAttribute("Label", string.Format("{0} ({1})", package.NugetId, package.LocalVersion)),
28 | new XAttribute("Background", GraphHelper.GenerateBackgroundColor(packages, package, colors))))
29 | .ToList();
30 |
31 | var links =
32 | (packages
33 | .SelectMany(
34 | package => package.Dependencies, (package, dep) =>
35 | new XElement(ns + "Link",
36 | new XAttribute("Source", package.Id),
37 | new XAttribute("Target", packages.Any(x => x.NugetId == dep.NugetId && x.LocalVersion == dep.Version) ? packages.First(x => x.NugetId == dep.NugetId && x.LocalVersion == dep.Version).Id : string.Format("{0} ({1})", dep.NugetId, dep.Version)))))
38 | .ToList();
39 |
40 | var document =
41 | new XDocument(
42 | new XDeclaration("1.0", "utf-8", string.Empty),
43 | new XElement(ns + "DirectedGraph", new XElement(ns + "Nodes", nodes), new XElement(ns + "Links", links)));
44 |
45 | document.Save(file);
46 | }
47 | }
48 | }
--------------------------------------------------------------------------------
/DependencyViewModel.cs:
--------------------------------------------------------------------------------
1 | namespace NuGetPackageVisualizer
2 | {
3 | public class DependencyViewModel
4 | {
5 | public string NugetId { get; set; }
6 |
7 | public string Version { get; set; }
8 | }
9 | }
--------------------------------------------------------------------------------
/DgmlColorConfiguration.cs:
--------------------------------------------------------------------------------
1 | namespace NuGetPackageVisualizer
2 | {
3 | public class DgmlColorConfiguration : IColorConfiguration
4 | {
5 | public string VersionMismatchPackageColor
6 | {
7 | get { return "#FF0000"; }
8 | }
9 |
10 | public string PackageHasDifferentVersionsColor
11 | {
12 | get { return "#FCE428"; }
13 | }
14 |
15 | public string DefaultColor
16 | {
17 | get { return "#339933"; }
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/GraphHelper.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Linq;
3 |
4 | namespace NuGetPackageVisualizer
5 | {
6 | public static class GraphHelper
7 | {
8 | public static string GenerateBackgroundColor(IEnumerable packages, PackageViewModel package, IColorConfiguration colors)
9 | {
10 | if (VersionMismatch(package))
11 | {
12 | return colors.VersionMismatchPackageColor;
13 | }
14 |
15 | if (HasSamePackageInDifferentVersion(packages, package))
16 | {
17 | return colors.PackageHasDifferentVersionsColor;
18 | }
19 |
20 | return colors.DefaultColor;
21 | }
22 |
23 | private static bool HasSamePackageInDifferentVersion(IEnumerable packages, PackageViewModel package)
24 | {
25 | return packages.Any(p => p.NugetId == package.NugetId && p.LocalVersion != package.LocalVersion);
26 | }
27 |
28 | private static bool VersionMismatch(PackageViewModel package)
29 | {
30 | return package.LocalVersion != package.RemoteVersion;
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/GraphVizColorConfiguration.cs:
--------------------------------------------------------------------------------
1 | namespace NuGetPackageVisualizer
2 | {
3 | public class GraphVizColorConfiguration : IColorConfiguration
4 | {
5 | public string VersionMismatchPackageColor
6 | {
7 | get { return "red"; }
8 | }
9 |
10 | public string PackageHasDifferentVersionsColor
11 | {
12 | get { return "grey"; }
13 | }
14 |
15 | public string DefaultColor
16 | {
17 | get { return "forestgreen"; }
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/GraphVizNodeExtensions.cs:
--------------------------------------------------------------------------------
1 | namespace NuGetPackageVisualizer
2 | {
3 | public static class GraphVizNodeExtensions
4 | {
5 | public static string GraphId(this PackageViewModel model)
6 | {
7 | return string.Format("{0}_{1}", model.NugetId, model.LocalVersion);
8 | }
9 |
10 | public static string DisplayVersion(this PackageViewModel model)
11 | {
12 | return string.Format("{0} ({1})", model.NugetId, model.LocalVersion);
13 | }
14 |
15 | public static string GraphId(this DependencyViewModel model)
16 | {
17 | return string.Format("{0}_{1}", model.NugetId, model.Version);
18 | }
19 |
20 | public static string DisplayVersion(this DependencyViewModel model)
21 | {
22 | return string.Format("{0} ({1})", model.NugetId, model.Version);
23 | }
24 | }
25 | }
--------------------------------------------------------------------------------
/GraphvizWriter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.IO;
5 | using System.Linq;
6 | using System.Text;
7 |
8 | namespace NuGetPackageVisualizer
9 | {
10 | public class GraphvizWriter : IPackageWriter
11 | {
12 | public void Write(List packages, string file)
13 | {
14 | if (string.IsNullOrWhiteSpace(file))
15 | {
16 | file = "packages.dot";
17 | }
18 |
19 | Debug.WriteLine($"Writing {file}.");
20 |
21 | var colors = new GraphVizColorConfiguration();
22 | var sb = new StringBuilder();
23 |
24 | WriteHeader(sb);
25 | foreach (var package in packages)
26 | {
27 | sb.AppendFormat(" \"{0}\"[fillcolor=\"{1}\",label=\"{2}\"];",
28 | package.GraphId(),
29 | GraphHelper.GenerateBackgroundColor(packages, package, colors),
30 | package.DisplayVersion()).AppendLine();
31 |
32 | var dependenciesToWrite = package.Dependencies.Select(dep =>
33 | String.Format(" \"{0}\" -> \"{1}\";", package.GraphId(), DependencyNodeId(dep, packages))).ToArray();
34 | sb.AppendLine(String.Join(Environment.NewLine, dependenciesToWrite));
35 | }
36 | WriteClose(sb);
37 |
38 | File.WriteAllText(file, sb.ToString());
39 | }
40 |
41 | private static void WriteHeader(StringBuilder sb)
42 | {
43 | sb.AppendLine("digraph packages {");
44 | sb.AppendLine(" node [shape=box, style=\"rounded,filled\"];");
45 | }
46 |
47 | private static void WriteClose(StringBuilder sb)
48 | {
49 | sb.AppendLine("}");
50 | }
51 |
52 | private static string DependencyNodeId(DependencyViewModel dep, IEnumerable packages)
53 | {
54 | string targetId = dep.GraphId();
55 | // If version on dep is not explicitly stated, we should use an existing package with same nuget id.
56 | // This greatly minimizes the number of disconnected nodes.
57 | if (string.IsNullOrWhiteSpace(dep.Version))
58 | {
59 | PackageViewModel existingModel = packages.FirstOrDefault(x => x.NugetId == dep.NugetId);
60 | if (existingModel != null)
61 | targetId = existingModel.GraphId();
62 | }
63 | return targetId;
64 | }
65 | }
66 | }
--------------------------------------------------------------------------------
/IColorConfiguration.cs:
--------------------------------------------------------------------------------
1 | namespace NuGetPackageVisualizer
2 | {
3 | public interface IColorConfiguration
4 | {
5 | string VersionMismatchPackageColor { get; }
6 | string PackageHasDifferentVersionsColor { get; }
7 | string DefaultColor { get; }
8 | }
9 | }
--------------------------------------------------------------------------------
/IPackageWriter.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 |
3 | namespace NuGetPackageVisualizer
4 | {
5 | public interface IPackageWriter
6 | {
7 | void Write(List packages, string file);
8 | }
9 | }
--------------------------------------------------------------------------------
/NuGetPackageVisualizer.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | x86
6 | 8.0.30703
7 | 2.0
8 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}
9 | Exe
10 | Properties
11 | NuGetPackageVisualizer
12 | NuGetPackageVisualizer
13 | v4.0
14 |
15 |
16 | 512
17 | .\
18 | true
19 |
20 |
21 | x86
22 | true
23 | full
24 | false
25 | bin\Debug\
26 | DEBUG;TRACE
27 | prompt
28 | 4
29 |
30 |
31 | x86
32 | pdbonly
33 | true
34 | bin\Release\
35 | TRACE
36 | prompt
37 | 4
38 |
39 |
40 | NuGetPackageVisualizer.Program
41 |
42 |
43 |
44 | packages\GoCommando.0.3\lib\net35\GoCommando.dll
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | True
72 | True
73 | Reference.datasvcmap
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | Designer
82 |
83 |
84 |
85 |
86 |
87 |
88 | datasvcmap
89 |
90 |
91 |
92 |
93 | DataServiceClientGenerator
94 | Reference.cs
95 |
96 |
97 |
98 |
99 |
106 |
--------------------------------------------------------------------------------
/NuGetPackageVisualizer.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $version$
5 | ThomasArdal
6 |
7 |
8 |
9 |
10 | NuGetPackageVisualizer
11 | NuGetPackageVisualizer
12 | false
13 | A small tool able to generate a DGML file visualizing your NuGet references.
14 | https://github.com/ThomasArdal/NuGetPackageVisualizer
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/NuGetPackageVisualizer.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 11.00
3 | # Visual Studio 2010
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NuGetPackageVisualizer", "NuGetPackageVisualizer.csproj", "{FDDDC704-5E29-4F18-8197-06B9FB447AB6}"
5 | EndProject
6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{016CB3D3-DF85-45A2-AD7E-5FED6732DF76}"
7 | ProjectSection(SolutionItems) = preProject
8 | .nuget\NuGet.Config = .nuget\NuGet.Config
9 | .nuget\NuGet.exe = .nuget\NuGet.exe
10 | .nuget\NuGet.targets = .nuget\NuGet.targets
11 | EndProjectSection
12 | EndProject
13 | Global
14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
15 | Debug|Any CPU = Debug|Any CPU
16 | Debug|Mixed Platforms = Debug|Mixed Platforms
17 | Debug|x86 = Debug|x86
18 | Release|Any CPU = Release|Any CPU
19 | Release|Mixed Platforms = Release|Mixed Platforms
20 | Release|x86 = Release|x86
21 | EndGlobalSection
22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
23 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Debug|Any CPU.ActiveCfg = Debug|x86
24 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
25 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Debug|Mixed Platforms.Build.0 = Debug|x86
26 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Debug|x86.ActiveCfg = Debug|x86
27 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Debug|x86.Build.0 = Debug|x86
28 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Release|Any CPU.ActiveCfg = Release|x86
29 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Release|Mixed Platforms.ActiveCfg = Release|x86
30 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Release|Mixed Platforms.Build.0 = Release|x86
31 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Release|x86.ActiveCfg = Release|x86
32 | {FDDDC704-5E29-4F18-8197-06B9FB447AB6}.Release|x86.Build.0 = Release|x86
33 | EndGlobalSection
34 | GlobalSection(SolutionProperties) = preSolution
35 | HideSolutionNode = FALSE
36 | EndGlobalSection
37 | EndGlobal
38 |
--------------------------------------------------------------------------------
/PackageViewModel.cs:
--------------------------------------------------------------------------------
1 | namespace NuGetPackageVisualizer
2 | {
3 | public class PackageViewModel
4 | {
5 | public string NugetId { get; set; }
6 |
7 | public string Id { get; set; }
8 |
9 | public string RemoteVersion { get; set; }
10 |
11 | public string LocalVersion { get; set; }
12 |
13 | public DependencyViewModel[] Dependencies { get; set; }
14 | }
15 | }
--------------------------------------------------------------------------------
/Program.cs:
--------------------------------------------------------------------------------
1 | using GoCommando;
2 | using GoCommando.Api;
3 | using GoCommando.Attributes;
4 | using NuGetPackageVisualizer.NuGetService;
5 | using System;
6 | using System.Collections.Concurrent;
7 | using System.Collections.Generic;
8 | using System.Data.Services.Client;
9 | using System.Diagnostics;
10 | using System.IO;
11 | using System.Linq;
12 | using System.Net;
13 | using System.Threading.Tasks;
14 | using System.Xml.Linq;
15 |
16 | namespace NuGetPackageVisualizer
17 | {
18 | public class Program : ICommando
19 | {
20 | [NamedArgument("folder", "l")]
21 | [Description("Path for a folder containing packages.config file(s).")]
22 | [Example("-folder:\"c:\\my projects\\proj\"")]
23 | public string Folder { get; set; }
24 |
25 | [NamedArgument("recursive", "r", Default = "true")]
26 | [Description("If set together with folder, a recursive search for packages.config files are made from the specified folder. Default: true.")]
27 | [Example("-recursive:false")]
28 | public bool Recursive { get; set; }
29 |
30 | [NamedArgument("file", "f")]
31 | [Description("Path to a packages.config file.")]
32 | [Example("-file:\"c:\\my projects\\proj\\packages.config\"")]
33 | public string File { get; set; }
34 |
35 | [NamedArgument("outputtype", "ot", Default = "dgml")]
36 | [Description("Sets the type of the output file. The following file types are supported: dgml, graphviz.")]
37 | [Example("-outputtype:dgml")]
38 | public string OutputType { get; set; }
39 |
40 | [NamedArgument("outputpath", "op", Default = "")]
41 | [Description("Sets the root path where output files should be written. Default: \"\" the folder where NuGet Package Visualizer was run.")]
42 | [Example("-outputpath:\"C:\\temp\"")]
43 | public string OutputPath { get; set; }
44 |
45 | [NamedArgument("output", "o", Default = "packages")]
46 | [Description("The name of the generated file for the whole source folder. Default: \"packages\".")]
47 | [Example("-output:.\\packages")]
48 | public string Output { get; set; }
49 |
50 | [NamedArgument("repositoryuri", "ru", Default = @"http://nuget.org/api/v2/")]
51 | [Description("The URI of the NuGet repository to use for reference. Default: \"http://nuget.org/api/v2/\".")]
52 | [Example("-repositoryuri:\"http://nuget.org/api/v2/\"")]
53 | public string RepositoryUrl { get; set; }
54 |
55 | [NamedArgument("wholediagram", "wd", Default = "true")]
56 | [Description("Whether to generate a diagram for the whole source. Default: true.")]
57 | [Example("-wholediagram:true")]
58 | public bool WholeDiagram { get; set; }
59 |
60 | [NamedArgument("projectdiagrams", "pd", Default = "false")]
61 | [Description("Whether to generate diagram per project in the source folder. Default: false.")]
62 | [Example("-projectdiagrams:false")]
63 | public bool ProjectDiagrams { get; set; }
64 |
65 | [NamedArgument("username", "u", Default = "")]
66 | [Description("The user name for accessing a protected package feed. Default: \"\" (empty).")]
67 | [Example("-username:jdoe")]
68 | public string UserName { get; set; }
69 |
70 | [NamedArgument("password", "pw", Default = "")]
71 | [Description("The password for accessing a protected package feed. Default: \"\" (empty).")]
72 | [Example("-password:XYZ")]
73 | public string Password { get; set; }
74 |
75 | public static void Main(string[] args)
76 | {
77 | Console.WriteLine("============================");
78 | Console.WriteLine("= NuGet Package Visualizer =");
79 | Console.WriteLine("============================");
80 | Go.Run(args);
81 | }
82 |
83 | public void Run()
84 | {
85 | if (!Valid())
86 | {
87 | Console.WriteLine("Invoke with -? for detailed help.");
88 | return;
89 | }
90 |
91 | var packageFiles = GetFiles();
92 | var packages = new ConcurrentBag();
93 |
94 | Parallel.ForEach(
95 | packageFiles,
96 | packageFile =>
97 | {
98 | if (!Path.GetDirectoryName(packageFile).EndsWith(".nuget", StringComparison.CurrentCultureIgnoreCase))
99 | {
100 | var projectPackages = GeneratePackages(packageFile);
101 |
102 | foreach (
103 | var package in
104 | projectPackages.Where(
105 | package =>
106 | package.LocalVersion != ""
107 | && !packages.Any(
108 | p => p.NugetId == package.NugetId && p.LocalVersion == package.LocalVersion)))
109 | {
110 | packages.Add(package);
111 | }
112 |
113 | if (ProjectDiagrams)
114 | GenerateFile(
115 | projectPackages,
116 | BuildFilePath(Path.GetFileName(Path.GetDirectoryName(packageFile))));
117 | }
118 | });
119 |
120 | if (WholeDiagram) GenerateFile(packages.ToList(), BuildFilePath(Output));
121 | }
122 |
123 | private IEnumerable GetFiles()
124 | {
125 | var packageFiles = new List();
126 | if (!string.IsNullOrWhiteSpace(File))
127 | packageFiles.Add(File);
128 | else
129 | packageFiles.AddRange(DirSearch(Folder));
130 |
131 | Debug.WriteLine($"Found {packageFiles.Count} package files.");
132 | return packageFiles;
133 | }
134 |
135 | private List GeneratePackages(string file)
136 | {
137 | Debug.WriteLine($"Processing {file}.");
138 |
139 | var packages = new List();
140 | var feedContext = new FeedContext_x0060_1(new Uri(RepositoryUrl))
141 | {
142 | IgnoreMissingProperties = true
143 | };
144 |
145 | ApplyCredentials(feedContext);
146 |
147 | var packagesConfig = XDocument.Load(file);
148 | var dependencies = new List();
149 |
150 | if (Path.GetFileName(file).Equals("packages.config", StringComparison.CurrentCultureIgnoreCase))
151 | {
152 | foreach (var package in packagesConfig.Descendants("package"))
153 | {
154 | var id = package.Attribute("id").Value;
155 | var version = package.Attribute("version").Value;
156 | // ReSharper disable ReplaceWithSingleCallToFirstOrDefault
157 | var remotePackage =
158 | feedContext
159 | .Packages
160 | .OrderByDescending(x => x.Version)
161 | .Where(x => x.Id == id && x.IsLatestVersion && !x.IsPrerelease)
162 | .FirstOrDefault();
163 | // ReSharper restore ReplaceWithSingleCallToFirstOrDefault
164 |
165 | dependencies.Add(new DependencyViewModel { NugetId = id, Version = version });
166 |
167 | if (remotePackage == null) continue;
168 |
169 | if (packages.Any(p => p.NugetId == id && p.LocalVersion == version)) continue;
170 |
171 | packages.Add(
172 | new PackageViewModel
173 | {
174 | RemoteVersion = remotePackage.Version,
175 | LocalVersion = version,
176 | NugetId = id,
177 | Id = Guid.NewGuid().ToString(),
178 | Dependencies = remotePackage.Dependencies
179 | .Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries)
180 | .Select(
181 | x =>
182 | {
183 | var strings = x.Split(new[] { ':' });
184 |
185 | return new DependencyViewModel { NugetId = strings[0], Version = strings[1] };
186 | })
187 | .ToArray()
188 | });
189 |
190 | foreach (
191 | var pack in
192 | packages
193 | .Last()
194 | .Dependencies
195 | .Select(
196 | dependency =>
197 | dependencies
198 | .FirstOrDefault(
199 | x => x.NugetId == dependency.NugetId && x.Version == dependency.Version))
200 | .Where(pack => pack != null))
201 | {
202 | dependencies.Remove(pack);
203 | }
204 | }
205 | }
206 |
207 | if (Path.GetExtension(file).Equals(".csproj", StringComparison.CurrentCultureIgnoreCase))
208 | {
209 | //todo process new format CSProj file.
210 | foreach (var package in packagesConfig.Descendants("PackageReference"))
211 | {
212 | var id = package.Attribute("Include")?.Value;
213 | var version = package.Attribute("Version")?.Value;
214 | // ReSharper disable ReplaceWithSingleCallToFirstOrDefault
215 | var remotePackage =
216 | feedContext
217 | .Packages
218 | .OrderByDescending(x => x.Version)
219 | .Where(x => x.Id == id && x.IsLatestVersion && !x.IsPrerelease)
220 | .FirstOrDefault();
221 | // ReSharper restore ReplaceWithSingleCallToFirstOrDefault
222 |
223 | dependencies.Add(new DependencyViewModel { NugetId = id, Version = version });
224 |
225 | if (remotePackage == null) continue;
226 |
227 | if (packages.Any(p => p.NugetId == id && p.LocalVersion == version)) continue;
228 |
229 | packages.Add(
230 | new PackageViewModel
231 | {
232 | RemoteVersion = remotePackage.Version,
233 | LocalVersion = version,
234 | NugetId = id,
235 | Id = Guid.NewGuid().ToString(),
236 | Dependencies = remotePackage.Dependencies
237 | .Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries)
238 | .Select(
239 | x =>
240 | {
241 | var strings = x.Split(new[] { ':' });
242 |
243 | return new DependencyViewModel { NugetId = strings[0], Version = strings[1] };
244 | })
245 | .ToArray()
246 | });
247 |
248 | foreach (
249 | var pack in
250 | packages
251 | .Last()
252 | .Dependencies
253 | .Select(
254 | dependency =>
255 | dependencies
256 | .FirstOrDefault(
257 | x => x.NugetId == dependency.NugetId && x.Version == dependency.Version))
258 | .Where(pack => pack != null))
259 | {
260 | dependencies.Remove(pack);
261 | }
262 | }
263 | }
264 |
265 | packages.Add(
266 | new PackageViewModel
267 | {
268 | RemoteVersion = "",
269 | LocalVersion = "",
270 | NugetId = Path.GetFileName(Path.GetDirectoryName(file)),
271 | Id = Guid.NewGuid().ToString(),
272 | Dependencies = dependencies.ToArray()
273 | });
274 |
275 | return packages;
276 | }
277 |
278 | private void ApplyCredentials(DataServiceContext dataServiceContext)
279 | {
280 | if (!string.IsNullOrEmpty(UserName))
281 | {
282 | if (string.IsNullOrEmpty(Password))
283 | {
284 | promptForPassword();
285 | }
286 | dataServiceContext.Credentials = new NetworkCredential(UserName, Password);
287 | }
288 | }
289 |
290 | private void promptForPassword()
291 | {
292 | Console.WriteLine("You have supplied a username only, please enter the password for accessing the protected feed:");
293 | Console.ResetColor();
294 |
295 | //from http://stackoverflow.com/a/3404522/1793
296 | var pass = string.Empty;
297 | ConsoleKeyInfo key;
298 | do
299 | {
300 | key = Console.ReadKey(true);
301 |
302 | // Backspace Should Not Work
303 | if (key.Key != ConsoleKey.Backspace && key.Key != ConsoleKey.Enter)
304 | {
305 | pass += key.KeyChar;
306 | Console.Write("*");
307 | }
308 | else
309 | {
310 | if (key.Key == ConsoleKey.Backspace && pass.Length > 0)
311 | {
312 | pass = pass.Substring(0, (pass.Length - 1));
313 | Console.Write("\b \b");
314 | }
315 | }
316 | }
317 | // Stops Receiving Keys Once Enter is Pressed
318 | while (key.Key != ConsoleKey.Enter);
319 | Console.WriteLine();
320 | Console.WriteLine("Thank you.");
321 | Password = pass;
322 | }
323 |
324 | private void GenerateFile(List packages, string fileName)
325 | {
326 | switch (OutputType)
327 | {
328 | case "dgml":
329 | new DGMLWriter().Write(packages, fileName);
330 | break;
331 |
332 | case "graphviz":
333 | new GraphvizWriter().Write(packages, fileName);
334 | break;
335 | }
336 | }
337 |
338 | private bool Valid()
339 | {
340 | if (FolderAndFileNotSpecified())
341 | {
342 | Console.WriteLine("You need to specify either folder or file.");
343 | return false;
344 | }
345 |
346 | if (FolderAndFileBothSpecified())
347 | {
348 | Console.WriteLine("You cannot specify both folder and file.");
349 | return false;
350 | }
351 |
352 | if (WholeDiagramAndProjectDiagramsNotSpecified())
353 | {
354 | Console.WriteLine("You must specify either wholediagram and/or projectdiagrams.");
355 | return false;
356 | }
357 |
358 | if (!string.IsNullOrWhiteSpace(File) && !System.IO.File.Exists(File))
359 | {
360 | Console.WriteLine("Could not find file: " + File);
361 | return false;
362 | }
363 |
364 | if (!string.IsNullOrWhiteSpace(Folder) && !Directory.Exists(Folder))
365 | {
366 | Console.WriteLine("Could not find folder: " + Folder);
367 | return false;
368 | }
369 |
370 | return true;
371 | }
372 |
373 | private bool FolderAndFileBothSpecified()
374 | {
375 | return !string.IsNullOrWhiteSpace(Folder) && !string.IsNullOrWhiteSpace(File);
376 | }
377 |
378 | private bool FolderAndFileNotSpecified()
379 | {
380 | return string.IsNullOrWhiteSpace(Folder) && string.IsNullOrWhiteSpace(File);
381 | }
382 |
383 | private bool WholeDiagramAndProjectDiagramsNotSpecified()
384 | {
385 | return !(WholeDiagram || ProjectDiagrams);
386 | }
387 |
388 | private IEnumerable DirSearch(string sDir)
389 | {
390 | var packageFiles = new List();
391 | try
392 | {
393 | foreach (var d in Directory.GetDirectories(sDir))
394 | {
395 | packageFiles.AddRange(Directory.GetFiles(d, "packages.config"));
396 | packageFiles.AddRange(Directory.GetFiles(d, "*.csproj"));
397 | if (Recursive)
398 | packageFiles.AddRange(DirSearch(d));
399 | }
400 | }
401 | catch (Exception excpt)
402 | {
403 | Console.WriteLine(excpt.Message);
404 | }
405 |
406 | return packageFiles;
407 | }
408 |
409 | private string BuildFilePath(string name)
410 | {
411 | if (OutputPath != string.Empty) Directory.CreateDirectory(OutputPath);
412 | return Path.Combine(OutputPath, string.Format("{0}.{1}", name, GetFileExtension()));
413 | }
414 |
415 | private string GetFileExtension()
416 | {
417 | return OutputType == "graphviz" ? "dot" : OutputType;
418 | }
419 | }
420 | }
--------------------------------------------------------------------------------
/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("NuGetPackageVisualizer")]
9 | [assembly: AssemblyDescription("A small tool able to generate a DGML file visualizing your NuGet references.")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("DiToMi")]
12 | [assembly: AssemblyProduct("NuGetPackageVisualizer")]
13 | [assembly: AssemblyCopyright("Copyright © DiToMi 2012")]
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("7550f507-c360-4ae8-87e3-30e83dd1e607")]
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | NuGetPackageVisualizer
2 | ======================
3 |
4 | A small tool able to generate a DGML file visualizing your NuGet references.
5 |
6 | Using different colors for each package, you will be able to monitor of you are using the most recent version of each package. Green color and you're good. Red and you are not using the recent version of that NuGet package. A yellow color indicates, that you are referencing the same package from different packages.config files, but in different versions.
7 |
8 | Example output:
9 |
10 | 
11 |
12 | In addition a dependency diagram will be produced for each project.
13 |
14 | Example output:
15 |
16 | 
17 |
18 | [](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=KR2FXHQX44EQJ&lc=DK&item_name=Thomas%20Ardal&item_number=NuGetPackageVisualizer&no_note=0&cn=Add%20special%20instructions%20to%20the%20seller%3a&no_shipping=2¤cy_code=DKK&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted)
19 |
--------------------------------------------------------------------------------
/Service References/NuGetService/Reference.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.18034
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | // Original file name:
12 | // Generation date: 18-03-2013 22:59:32
13 | namespace NuGetPackageVisualizer.NuGetService
14 | {
15 |
16 | ///
17 | /// There are no comments for FeedContext_x0060_1 in the schema.
18 | ///
19 | public partial class FeedContext_x0060_1 : global::System.Data.Services.Client.DataServiceContext
20 | {
21 | ///
22 | /// Initialize a new FeedContext_x0060_1 object.
23 | ///
24 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
25 | public FeedContext_x0060_1(global::System.Uri serviceRoot) :
26 | base(serviceRoot)
27 | {
28 | this.ResolveName = new global::System.Func(this.ResolveNameFromType);
29 | this.ResolveType = new global::System.Func(this.ResolveTypeFromName);
30 | this.OnContextCreated();
31 | }
32 | partial void OnContextCreated();
33 | ///
34 | /// Since the namespace configured for this service reference
35 | /// in Visual Studio is different from the one indicated in the
36 | /// server schema, use type-mappers to map between the two.
37 | ///
38 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
39 | protected global::System.Type ResolveTypeFromName(string typeName)
40 | {
41 | if (typeName.StartsWith("NuGetGallery", global::System.StringComparison.Ordinal))
42 | {
43 | return this.GetType().Assembly.GetType(string.Concat("NuGetPackageVisualizer.NuGetService", typeName.Substring(12)), false);
44 | }
45 | return null;
46 | }
47 | ///
48 | /// Since the namespace configured for this service reference
49 | /// in Visual Studio is different from the one indicated in the
50 | /// server schema, use type-mappers to map between the two.
51 | ///
52 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
53 | protected string ResolveNameFromType(global::System.Type clientType)
54 | {
55 | if (clientType.Namespace.Equals("NuGetPackageVisualizer.NuGetService", global::System.StringComparison.Ordinal))
56 | {
57 | return string.Concat("NuGetGallery.", clientType.Name);
58 | }
59 | return null;
60 | }
61 | ///
62 | /// There are no comments for Packages in the schema.
63 | ///
64 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
65 | public global::System.Data.Services.Client.DataServiceQuery Packages
66 | {
67 | get
68 | {
69 | if ((this._Packages == null))
70 | {
71 | this._Packages = base.CreateQuery("Packages");
72 | }
73 | return this._Packages;
74 | }
75 | }
76 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
77 | private global::System.Data.Services.Client.DataServiceQuery _Packages;
78 | ///
79 | /// There are no comments for Packages in the schema.
80 | ///
81 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
82 | public void AddToPackages(V2FeedPackage v2FeedPackage)
83 | {
84 | base.AddObject("Packages", v2FeedPackage);
85 | }
86 | }
87 | ///
88 | /// There are no comments for NuGetGallery.V2FeedPackage in the schema.
89 | ///
90 | ///
91 | /// Id
92 | /// Version
93 | ///
94 | [global::System.Data.Services.Common.EntitySetAttribute("Packages")]
95 | [global::System.Data.Services.Common.EntityPropertyMappingAttribute("Id", System.Data.Services.Common.SyndicationItemProperty.Title, System.Data.Services.Common.SyndicationTextContentKind.Plaintext, false)]
96 | [global::System.Data.Services.Common.EntityPropertyMappingAttribute("Authors", System.Data.Services.Common.SyndicationItemProperty.AuthorName, System.Data.Services.Common.SyndicationTextContentKind.Plaintext, false)]
97 | [global::System.Data.Services.Common.EntityPropertyMappingAttribute("LastUpdated", System.Data.Services.Common.SyndicationItemProperty.Updated, System.Data.Services.Common.SyndicationTextContentKind.Plaintext, false)]
98 | [global::System.Data.Services.Common.EntityPropertyMappingAttribute("Summary", System.Data.Services.Common.SyndicationItemProperty.Summary, System.Data.Services.Common.SyndicationTextContentKind.Plaintext, false)]
99 | [global::System.Data.Services.Common.HasStreamAttribute()]
100 | [global::System.Data.Services.Common.DataServiceKeyAttribute("Id", "Version")]
101 | public partial class V2FeedPackage : global::System.ComponentModel.INotifyPropertyChanged
102 | {
103 | ///
104 | /// Create a new V2FeedPackage object.
105 | ///
106 | /// Initial value of Id.
107 | /// Initial value of Version.
108 | /// Initial value of Created.
109 | /// Initial value of DownloadCount.
110 | /// Initial value of IsLatestVersion.
111 | /// Initial value of IsAbsoluteLatestVersion.
112 | /// Initial value of IsPrerelease.
113 | /// Initial value of LastUpdated.
114 | /// Initial value of Published.
115 | /// Initial value of PackageSize.
116 | /// Initial value of RequireLicenseAcceptance.
117 | /// Initial value of VersionDownloadCount.
118 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
119 | public static V2FeedPackage CreateV2FeedPackage(string ID, string version, global::System.DateTime created, int downloadCount, bool isLatestVersion, bool isAbsoluteLatestVersion, bool isPrerelease, global::System.DateTime lastUpdated, global::System.DateTime published, long packageSize, bool requireLicenseAcceptance, int versionDownloadCount)
120 | {
121 | V2FeedPackage v2FeedPackage = new V2FeedPackage();
122 | v2FeedPackage.Id = ID;
123 | v2FeedPackage.Version = version;
124 | v2FeedPackage.Created = created;
125 | v2FeedPackage.DownloadCount = downloadCount;
126 | v2FeedPackage.IsLatestVersion = isLatestVersion;
127 | v2FeedPackage.IsAbsoluteLatestVersion = isAbsoluteLatestVersion;
128 | v2FeedPackage.IsPrerelease = isPrerelease;
129 | v2FeedPackage.LastUpdated = lastUpdated;
130 | v2FeedPackage.Published = published;
131 | v2FeedPackage.PackageSize = packageSize;
132 | v2FeedPackage.RequireLicenseAcceptance = requireLicenseAcceptance;
133 | v2FeedPackage.VersionDownloadCount = versionDownloadCount;
134 | return v2FeedPackage;
135 | }
136 | ///
137 | /// There are no comments for Property Id in the schema.
138 | ///
139 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
140 | public string Id
141 | {
142 | get
143 | {
144 | return this._Id;
145 | }
146 | set
147 | {
148 | this.OnIdChanging(value);
149 | this._Id = value;
150 | this.OnIdChanged();
151 | this.OnPropertyChanged("Id");
152 | }
153 | }
154 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
155 | private string _Id;
156 | partial void OnIdChanging(string value);
157 | partial void OnIdChanged();
158 | ///
159 | /// There are no comments for Property Version in the schema.
160 | ///
161 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
162 | public string Version
163 | {
164 | get
165 | {
166 | return this._Version;
167 | }
168 | set
169 | {
170 | this.OnVersionChanging(value);
171 | this._Version = value;
172 | this.OnVersionChanged();
173 | this.OnPropertyChanged("Version");
174 | }
175 | }
176 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
177 | private string _Version;
178 | partial void OnVersionChanging(string value);
179 | partial void OnVersionChanged();
180 | ///
181 | /// There are no comments for Property Authors in the schema.
182 | ///
183 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
184 | public string Authors
185 | {
186 | get
187 | {
188 | return this._Authors;
189 | }
190 | set
191 | {
192 | this.OnAuthorsChanging(value);
193 | this._Authors = value;
194 | this.OnAuthorsChanged();
195 | this.OnPropertyChanged("Authors");
196 | }
197 | }
198 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
199 | private string _Authors;
200 | partial void OnAuthorsChanging(string value);
201 | partial void OnAuthorsChanged();
202 | ///
203 | /// There are no comments for Property Copyright in the schema.
204 | ///
205 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
206 | public string Copyright
207 | {
208 | get
209 | {
210 | return this._Copyright;
211 | }
212 | set
213 | {
214 | this.OnCopyrightChanging(value);
215 | this._Copyright = value;
216 | this.OnCopyrightChanged();
217 | this.OnPropertyChanged("Copyright");
218 | }
219 | }
220 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
221 | private string _Copyright;
222 | partial void OnCopyrightChanging(string value);
223 | partial void OnCopyrightChanged();
224 | ///
225 | /// There are no comments for Property Created in the schema.
226 | ///
227 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
228 | public global::System.DateTime Created
229 | {
230 | get
231 | {
232 | return this._Created;
233 | }
234 | set
235 | {
236 | this.OnCreatedChanging(value);
237 | this._Created = value;
238 | this.OnCreatedChanged();
239 | this.OnPropertyChanged("Created");
240 | }
241 | }
242 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
243 | private global::System.DateTime _Created;
244 | partial void OnCreatedChanging(global::System.DateTime value);
245 | partial void OnCreatedChanged();
246 | ///
247 | /// There are no comments for Property Dependencies in the schema.
248 | ///
249 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
250 | public string Dependencies
251 | {
252 | get
253 | {
254 | return this._Dependencies;
255 | }
256 | set
257 | {
258 | this.OnDependenciesChanging(value);
259 | this._Dependencies = value;
260 | this.OnDependenciesChanged();
261 | this.OnPropertyChanged("Dependencies");
262 | }
263 | }
264 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
265 | private string _Dependencies;
266 | partial void OnDependenciesChanging(string value);
267 | partial void OnDependenciesChanged();
268 | ///
269 | /// There are no comments for Property Description in the schema.
270 | ///
271 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
272 | public string Description
273 | {
274 | get
275 | {
276 | return this._Description;
277 | }
278 | set
279 | {
280 | this.OnDescriptionChanging(value);
281 | this._Description = value;
282 | this.OnDescriptionChanged();
283 | this.OnPropertyChanged("Description");
284 | }
285 | }
286 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
287 | private string _Description;
288 | partial void OnDescriptionChanging(string value);
289 | partial void OnDescriptionChanged();
290 | ///
291 | /// There are no comments for Property DownloadCount in the schema.
292 | ///
293 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
294 | public int DownloadCount
295 | {
296 | get
297 | {
298 | return this._DownloadCount;
299 | }
300 | set
301 | {
302 | this.OnDownloadCountChanging(value);
303 | this._DownloadCount = value;
304 | this.OnDownloadCountChanged();
305 | this.OnPropertyChanged("DownloadCount");
306 | }
307 | }
308 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
309 | private int _DownloadCount;
310 | partial void OnDownloadCountChanging(int value);
311 | partial void OnDownloadCountChanged();
312 | ///
313 | /// There are no comments for Property GalleryDetailsUrl in the schema.
314 | ///
315 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
316 | public string GalleryDetailsUrl
317 | {
318 | get
319 | {
320 | return this._GalleryDetailsUrl;
321 | }
322 | set
323 | {
324 | this.OnGalleryDetailsUrlChanging(value);
325 | this._GalleryDetailsUrl = value;
326 | this.OnGalleryDetailsUrlChanged();
327 | this.OnPropertyChanged("GalleryDetailsUrl");
328 | }
329 | }
330 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
331 | private string _GalleryDetailsUrl;
332 | partial void OnGalleryDetailsUrlChanging(string value);
333 | partial void OnGalleryDetailsUrlChanged();
334 | ///
335 | /// There are no comments for Property IconUrl in the schema.
336 | ///
337 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
338 | public string IconUrl
339 | {
340 | get
341 | {
342 | return this._IconUrl;
343 | }
344 | set
345 | {
346 | this.OnIconUrlChanging(value);
347 | this._IconUrl = value;
348 | this.OnIconUrlChanged();
349 | this.OnPropertyChanged("IconUrl");
350 | }
351 | }
352 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
353 | private string _IconUrl;
354 | partial void OnIconUrlChanging(string value);
355 | partial void OnIconUrlChanged();
356 | ///
357 | /// There are no comments for Property IsLatestVersion in the schema.
358 | ///
359 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
360 | public bool IsLatestVersion
361 | {
362 | get
363 | {
364 | return this._IsLatestVersion;
365 | }
366 | set
367 | {
368 | this.OnIsLatestVersionChanging(value);
369 | this._IsLatestVersion = value;
370 | this.OnIsLatestVersionChanged();
371 | this.OnPropertyChanged("IsLatestVersion");
372 | }
373 | }
374 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
375 | private bool _IsLatestVersion;
376 | partial void OnIsLatestVersionChanging(bool value);
377 | partial void OnIsLatestVersionChanged();
378 | ///
379 | /// There are no comments for Property IsAbsoluteLatestVersion in the schema.
380 | ///
381 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
382 | public bool IsAbsoluteLatestVersion
383 | {
384 | get
385 | {
386 | return this._IsAbsoluteLatestVersion;
387 | }
388 | set
389 | {
390 | this.OnIsAbsoluteLatestVersionChanging(value);
391 | this._IsAbsoluteLatestVersion = value;
392 | this.OnIsAbsoluteLatestVersionChanged();
393 | this.OnPropertyChanged("IsAbsoluteLatestVersion");
394 | }
395 | }
396 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
397 | private bool _IsAbsoluteLatestVersion;
398 | partial void OnIsAbsoluteLatestVersionChanging(bool value);
399 | partial void OnIsAbsoluteLatestVersionChanged();
400 | ///
401 | /// There are no comments for Property IsPrerelease in the schema.
402 | ///
403 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
404 | public bool IsPrerelease
405 | {
406 | get
407 | {
408 | return this._IsPrerelease;
409 | }
410 | set
411 | {
412 | this.OnIsPrereleaseChanging(value);
413 | this._IsPrerelease = value;
414 | this.OnIsPrereleaseChanged();
415 | this.OnPropertyChanged("IsPrerelease");
416 | }
417 | }
418 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
419 | private bool _IsPrerelease;
420 | partial void OnIsPrereleaseChanging(bool value);
421 | partial void OnIsPrereleaseChanged();
422 | ///
423 | /// There are no comments for Property Language in the schema.
424 | ///
425 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
426 | public string Language
427 | {
428 | get
429 | {
430 | return this._Language;
431 | }
432 | set
433 | {
434 | this.OnLanguageChanging(value);
435 | this._Language = value;
436 | this.OnLanguageChanged();
437 | this.OnPropertyChanged("Language");
438 | }
439 | }
440 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
441 | private string _Language;
442 | partial void OnLanguageChanging(string value);
443 | partial void OnLanguageChanged();
444 | ///
445 | /// There are no comments for Property LastUpdated in the schema.
446 | ///
447 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
448 | public global::System.DateTime LastUpdated
449 | {
450 | get
451 | {
452 | return this._LastUpdated;
453 | }
454 | set
455 | {
456 | this.OnLastUpdatedChanging(value);
457 | this._LastUpdated = value;
458 | this.OnLastUpdatedChanged();
459 | this.OnPropertyChanged("LastUpdated");
460 | }
461 | }
462 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
463 | private global::System.DateTime _LastUpdated;
464 | partial void OnLastUpdatedChanging(global::System.DateTime value);
465 | partial void OnLastUpdatedChanged();
466 | ///
467 | /// There are no comments for Property Published in the schema.
468 | ///
469 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
470 | public global::System.DateTime Published
471 | {
472 | get
473 | {
474 | return this._Published;
475 | }
476 | set
477 | {
478 | this.OnPublishedChanging(value);
479 | this._Published = value;
480 | this.OnPublishedChanged();
481 | this.OnPropertyChanged("Published");
482 | }
483 | }
484 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
485 | private global::System.DateTime _Published;
486 | partial void OnPublishedChanging(global::System.DateTime value);
487 | partial void OnPublishedChanged();
488 | ///
489 | /// There are no comments for Property LicenseUrl in the schema.
490 | ///
491 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
492 | public string LicenseUrl
493 | {
494 | get
495 | {
496 | return this._LicenseUrl;
497 | }
498 | set
499 | {
500 | this.OnLicenseUrlChanging(value);
501 | this._LicenseUrl = value;
502 | this.OnLicenseUrlChanged();
503 | this.OnPropertyChanged("LicenseUrl");
504 | }
505 | }
506 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
507 | private string _LicenseUrl;
508 | partial void OnLicenseUrlChanging(string value);
509 | partial void OnLicenseUrlChanged();
510 | ///
511 | /// There are no comments for Property PackageHash in the schema.
512 | ///
513 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
514 | public string PackageHash
515 | {
516 | get
517 | {
518 | return this._PackageHash;
519 | }
520 | set
521 | {
522 | this.OnPackageHashChanging(value);
523 | this._PackageHash = value;
524 | this.OnPackageHashChanged();
525 | this.OnPropertyChanged("PackageHash");
526 | }
527 | }
528 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
529 | private string _PackageHash;
530 | partial void OnPackageHashChanging(string value);
531 | partial void OnPackageHashChanged();
532 | ///
533 | /// There are no comments for Property PackageHashAlgorithm in the schema.
534 | ///
535 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
536 | public string PackageHashAlgorithm
537 | {
538 | get
539 | {
540 | return this._PackageHashAlgorithm;
541 | }
542 | set
543 | {
544 | this.OnPackageHashAlgorithmChanging(value);
545 | this._PackageHashAlgorithm = value;
546 | this.OnPackageHashAlgorithmChanged();
547 | this.OnPropertyChanged("PackageHashAlgorithm");
548 | }
549 | }
550 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
551 | private string _PackageHashAlgorithm;
552 | partial void OnPackageHashAlgorithmChanging(string value);
553 | partial void OnPackageHashAlgorithmChanged();
554 | ///
555 | /// There are no comments for Property PackageSize in the schema.
556 | ///
557 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
558 | public long PackageSize
559 | {
560 | get
561 | {
562 | return this._PackageSize;
563 | }
564 | set
565 | {
566 | this.OnPackageSizeChanging(value);
567 | this._PackageSize = value;
568 | this.OnPackageSizeChanged();
569 | this.OnPropertyChanged("PackageSize");
570 | }
571 | }
572 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
573 | private long _PackageSize;
574 | partial void OnPackageSizeChanging(long value);
575 | partial void OnPackageSizeChanged();
576 | ///
577 | /// There are no comments for Property ProjectUrl in the schema.
578 | ///
579 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
580 | public string ProjectUrl
581 | {
582 | get
583 | {
584 | return this._ProjectUrl;
585 | }
586 | set
587 | {
588 | this.OnProjectUrlChanging(value);
589 | this._ProjectUrl = value;
590 | this.OnProjectUrlChanged();
591 | this.OnPropertyChanged("ProjectUrl");
592 | }
593 | }
594 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
595 | private string _ProjectUrl;
596 | partial void OnProjectUrlChanging(string value);
597 | partial void OnProjectUrlChanged();
598 | ///
599 | /// There are no comments for Property ReportAbuseUrl in the schema.
600 | ///
601 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
602 | public string ReportAbuseUrl
603 | {
604 | get
605 | {
606 | return this._ReportAbuseUrl;
607 | }
608 | set
609 | {
610 | this.OnReportAbuseUrlChanging(value);
611 | this._ReportAbuseUrl = value;
612 | this.OnReportAbuseUrlChanged();
613 | this.OnPropertyChanged("ReportAbuseUrl");
614 | }
615 | }
616 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
617 | private string _ReportAbuseUrl;
618 | partial void OnReportAbuseUrlChanging(string value);
619 | partial void OnReportAbuseUrlChanged();
620 | ///
621 | /// There are no comments for Property ReleaseNotes in the schema.
622 | ///
623 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
624 | public string ReleaseNotes
625 | {
626 | get
627 | {
628 | return this._ReleaseNotes;
629 | }
630 | set
631 | {
632 | this.OnReleaseNotesChanging(value);
633 | this._ReleaseNotes = value;
634 | this.OnReleaseNotesChanged();
635 | this.OnPropertyChanged("ReleaseNotes");
636 | }
637 | }
638 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
639 | private string _ReleaseNotes;
640 | partial void OnReleaseNotesChanging(string value);
641 | partial void OnReleaseNotesChanged();
642 | ///
643 | /// There are no comments for Property RequireLicenseAcceptance in the schema.
644 | ///
645 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
646 | public bool RequireLicenseAcceptance
647 | {
648 | get
649 | {
650 | return this._RequireLicenseAcceptance;
651 | }
652 | set
653 | {
654 | this.OnRequireLicenseAcceptanceChanging(value);
655 | this._RequireLicenseAcceptance = value;
656 | this.OnRequireLicenseAcceptanceChanged();
657 | this.OnPropertyChanged("RequireLicenseAcceptance");
658 | }
659 | }
660 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
661 | private bool _RequireLicenseAcceptance;
662 | partial void OnRequireLicenseAcceptanceChanging(bool value);
663 | partial void OnRequireLicenseAcceptanceChanged();
664 | ///
665 | /// There are no comments for Property Summary in the schema.
666 | ///
667 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
668 | public string Summary
669 | {
670 | get
671 | {
672 | return this._Summary;
673 | }
674 | set
675 | {
676 | this.OnSummaryChanging(value);
677 | this._Summary = value;
678 | this.OnSummaryChanged();
679 | this.OnPropertyChanged("Summary");
680 | }
681 | }
682 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
683 | private string _Summary;
684 | partial void OnSummaryChanging(string value);
685 | partial void OnSummaryChanged();
686 | ///
687 | /// There are no comments for Property Tags in the schema.
688 | ///
689 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
690 | public string Tags
691 | {
692 | get
693 | {
694 | return this._Tags;
695 | }
696 | set
697 | {
698 | this.OnTagsChanging(value);
699 | this._Tags = value;
700 | this.OnTagsChanged();
701 | this.OnPropertyChanged("Tags");
702 | }
703 | }
704 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
705 | private string _Tags;
706 | partial void OnTagsChanging(string value);
707 | partial void OnTagsChanged();
708 | ///
709 | /// There are no comments for Property Title in the schema.
710 | ///
711 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
712 | public string Title
713 | {
714 | get
715 | {
716 | return this._Title;
717 | }
718 | set
719 | {
720 | this.OnTitleChanging(value);
721 | this._Title = value;
722 | this.OnTitleChanged();
723 | this.OnPropertyChanged("Title");
724 | }
725 | }
726 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
727 | private string _Title;
728 | partial void OnTitleChanging(string value);
729 | partial void OnTitleChanged();
730 | ///
731 | /// There are no comments for Property VersionDownloadCount in the schema.
732 | ///
733 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
734 | public int VersionDownloadCount
735 | {
736 | get
737 | {
738 | return this._VersionDownloadCount;
739 | }
740 | set
741 | {
742 | this.OnVersionDownloadCountChanging(value);
743 | this._VersionDownloadCount = value;
744 | this.OnVersionDownloadCountChanged();
745 | this.OnPropertyChanged("VersionDownloadCount");
746 | }
747 | }
748 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
749 | private int _VersionDownloadCount;
750 | partial void OnVersionDownloadCountChanging(int value);
751 | partial void OnVersionDownloadCountChanged();
752 | ///
753 | /// There are no comments for Property MinClientVersion in the schema.
754 | ///
755 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
756 | public string MinClientVersion
757 | {
758 | get
759 | {
760 | return this._MinClientVersion;
761 | }
762 | set
763 | {
764 | this.OnMinClientVersionChanging(value);
765 | this._MinClientVersion = value;
766 | this.OnMinClientVersionChanged();
767 | this.OnPropertyChanged("MinClientVersion");
768 | }
769 | }
770 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
771 | private string _MinClientVersion;
772 | partial void OnMinClientVersionChanging(string value);
773 | partial void OnMinClientVersionChanged();
774 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
775 | public event global::System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
776 | [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Services.Design", "1.0.0")]
777 | protected virtual void OnPropertyChanged(string property)
778 | {
779 | if ((this.PropertyChanged != null))
780 | {
781 | this.PropertyChanged(this, new global::System.ComponentModel.PropertyChangedEventArgs(property));
782 | }
783 | }
784 | }
785 | }
786 |
--------------------------------------------------------------------------------
/Service References/NuGetService/Reference.datasvcmap:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Service References/NuGetService/service.edmx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasArdal/NuGetPackageVisualizer/f34be4797988137dba52cf96d6b04b06b85c2b9a/example.png
--------------------------------------------------------------------------------
/license.txt:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
10 |
11 | "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
12 |
13 | "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
14 |
15 | "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
16 |
17 | "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
18 |
19 | "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
20 |
21 | "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
22 |
23 | "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
24 |
25 | "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
26 |
27 | "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
28 |
29 | 2. Grant of Copyright License.
30 |
31 | Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
32 |
33 | 3. Grant of Patent License.
34 |
35 | Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
36 |
37 | 4. Redistribution.
38 |
39 | You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
40 |
41 | 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
42 |
43 | 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
44 |
45 | 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
46 |
47 | 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
48 |
49 | You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
50 |
51 | 5. Submission of Contributions.
52 |
53 | Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
54 |
55 | 6. Trademarks.
56 |
57 | This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
58 |
59 | 7. Disclaimer of Warranty.
60 |
61 | Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
62 |
63 | 8. Limitation of Liability.
64 |
65 | In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
66 |
67 | 9. Accepting Warranty or Additional Liability.
68 |
69 | While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
--------------------------------------------------------------------------------
/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/projectExample.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasArdal/NuGetPackageVisualizer/f34be4797988137dba52cf96d6b04b06b85c2b9a/projectExample.PNG
--------------------------------------------------------------------------------