-
Notifications
You must be signed in to change notification settings - Fork 0
/
packageVersions.csx
88 lines (77 loc) · 3 KB
/
packageVersions.csx
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System;
using NuGet;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
public static class PackageVersions
{
public static void Get()
{
string path = @"C:\Code";
string[] files = Directory.GetFiles(path, "packages.config", SearchOption.AllDirectories);
const string format = "{0},{1},{2}";
StringBuilder builder = new StringBuilder();
List<SearchResults> results = new List<SearchResults>();
foreach (var fileName in files)
{
var file = new PackageReferenceFile(fileName);
foreach (PackageReference packageReference in file.GetPackageReferences())
{
SearchResults currentResult = results.FirstOrDefault(x => x.PackageId == packageReference.Id);
if (currentResult == null)
{
currentResult = new SearchResults
{
PackageId = packageReference.Id
};
results.Add(currentResult);
}
SearchResults.SearchVersion currentVersion = currentResult.Versions.FirstOrDefault(x => x.PackageVersion == packageReference.Version.ToString());
if (currentVersion == null)
{
currentVersion = new SearchResults.SearchVersion
{
PackageVersion = packageReference.Version.ToString()
};
currentResult.Versions.Add(currentVersion);
}
currentVersion.Path.Add(fileName);
}
}
results.ForEach(result =>
{
if (result.Versions.Count > 1) // multiple versions of same package
{
result.Versions.ForEach(version =>
{
version.Path.ForEach(packagePath =>
{
builder.AppendFormat(format, result.PackageId, packagePath, version.PackageVersion);
builder.AppendLine();
});
});
}
});
File.WriteAllText(Path.Combine(path, "packages-duplicates.csv"), builder.ToString());
}
}
public class SearchResults
{
public string PackageId { get; set; }
public List<SearchVersion> Versions { get; set; }
public SearchResults()
{
Versions = new List<SearchResults.SearchVersion>();
}
public class SearchVersion
{
public string PackageVersion { get; set; }
public List<string> Path { get; set; }
public SearchVersion()
{
Path = new List<string>();
}
}
}
PackageVersions.Get();