namespace Recordingtest.SutProber; public sealed record PluginEntry(string Name, string Path, IReadOnlyList Dlls, long SizeBytes); public static class PluginScanner { public static List Scan(string sutRoot) { var pluginRoot = System.IO.Path.Combine(sutRoot, "Plugins"); if (!Directory.Exists(pluginRoot)) return new(); var entries = new List(); foreach (var dir in Directory.EnumerateDirectories(pluginRoot).OrderBy(d => d, StringComparer.Ordinal)) { var dlls = Directory.EnumerateFiles(dir, "*.dll", SearchOption.TopDirectoryOnly) .Select(System.IO.Path.GetFileName) .Where(n => n is not null) .Select(n => n!) .OrderBy(n => n, StringComparer.Ordinal) .ToList(); long size = 0; foreach (var f in Directory.EnumerateFiles(dir, "*", SearchOption.AllDirectories)) size += new FileInfo(f).Length; var name = System.IO.Path.GetFileName(dir); var relPath = System.IO.Path.GetRelativePath(".", dir).Replace('\\', '/'); entries.Add(new PluginEntry(name, relPath, dlls, size)); } return entries; } }