public static DelFileAnalyzers LoadFileAnalyzers() { DelFileAnalyzers del = null; string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string[] files = Directory.GetFiles(path, "*.dll"); if (files != null) { foreach (string dll in files) { Assembly a = Assembly.LoadFile(dll); foreach (Type t in a.GetTypes()) { if (t.GetInterface("IDGFileAnalyzer") != null) { try { IDGFileAnalyzer fa = Activator.CreateInstance(t) as IDGFileAnalyzer; del += fa.AnalyzeFile; } catch { // nothing to do here :( } } } } } return(del); }
private static void AnalyzeFile(ref FileInfo file, ref List <FileInfo> FileInfosFullList, string[] VendorsToExclude, DelFileAnalyzers FileAnalyzers) { if (FileInfosFullList.Contains(file)) { file = FileInfosFullList.ElementAt(FileInfosFullList.IndexOf(file)); } else { AddVendorInformation(ref file); FileAnalyzers(ref file); FileInfosFullList.Add(file); string SystemDir = Environment.SystemDirectory; string WinDir = Environment.GetEnvironmentVariable("windir"); string[] EnvPaths = Environment.GetEnvironmentVariable("path").Split(new char[] { ';' }); List <DGFileImport> CleanImports = new List <DGFileImport>(); foreach (DGFileImport import in file.Imports) { string path = Path.GetDirectoryName(file.FileNameFullPath); if (File.Exists(path + "\\" + import.File.FileName)) { import.File.FileNameFullPath = path + "\\" + import.File.FileName; } else if (File.Exists(SystemDir + "\\" + import.File.FileName)) { import.File.FileNameFullPath = SystemDir + "\\" + import.File.FileName; } else if (File.Exists(WinDir + "\\" + import.File.FileName)) { import.File.FileNameFullPath = WinDir + "\\" + import.File.FileName; } else { foreach (string p in EnvPaths) { if (File.Exists(p + "\\" + import.File.FileName)) { import.File.FileNameFullPath = p + "\\" + import.File.FileName; break; } } if (import.File.FileNameFullPath == null) { continue; } } FileInfo fi = import.File; if (!ShouldFileBeExcluded(fi, VendorsToExclude)) { AnalyzeFile(ref fi, ref FileInfosFullList, VendorsToExclude, FileAnalyzers); } import.File = fi; } foreach (DGFileImport i in file.Imports) { if (!ShouldFileBeExcluded(i.File, VendorsToExclude)) { CleanImports.Add(i); } } file.Imports.Clear(); file.Imports.AddRange(CleanImports); } }
public static FileInfo[] CreateDependencyGraph(string[] FileNames, string[] VendorsToExclude, DelFileAnalyzers FileAnalyzers) { List <FileInfo> FileInfosReturn = new List <FileInfo>(); if (FileAnalyzers != null) { List <FileInfo> FileInfosFullList = new List <FileInfo>(); foreach (string fn in FileNames) { FileInfo fi = new FileInfo(Path.GetFileName(fn)); fi.FileNameFullPath = fn; AnalyzeFile(ref fi, ref FileInfosFullList, VendorsToExclude, FileAnalyzers); FileInfosReturn.Add(fi); } } return(FileInfosReturn.ToArray()); }