private void ProcessDirectory(string directoryPath) { var savedDirectory = Directory.GetCurrentDirectory(); Directory.SetCurrentDirectory(directoryPath); _loader = AppDomainHelpers.CreateProxy <AssemblyLoader>(directoryPath, out _testDomain); foreach (var file in Directory.GetFiles(directoryPath).Where(file => file.EndsWith(".dll"))) { AssemblyRecord assembly = CreateAssemblyRecord(file); _assemblies[assembly.Name] = assembly; if (RequiresExactVersionMatch(assembly)) { AddSharedAssemblyExactVersion(assembly); } else { AddSharedAssembly(assembly); } } // Now check for assembly mismatches foreach (var assembly in _assemblies.Values) { foreach (var reference in assembly.Children) { CheckAssemblyReference(reference, assembly); } } FindExtraAssemblies(); AppDomain.Unload(_testDomain); Directory.SetCurrentDirectory(savedDirectory); }
/// <summary> /// Given a set of directory paths containing PowerShell module folders, analyze the help /// in the module folders and report any issues /// </summary> /// <param name="scopes"></param> public void Analyze(IEnumerable <string> scopes) { var savedDirectory = Directory.GetCurrentDirectory(); var processedHelpFiles = new List <string>(); var helpLogger = Logger.CreateLogger <HelpIssue>("HelpIssues.csv"); foreach (var baseDirectory in scopes.Where(s => Directory.Exists(Path.GetFullPath(s)))) { foreach (var directory in Directory.EnumerateDirectories(Path.GetFullPath(baseDirectory))) { var helpFiles = Directory.EnumerateFiles(directory, "*.dll-Help.xml") .Where(f => !processedHelpFiles.Contains(Path.GetFileName(f), StringComparer.OrdinalIgnoreCase)).ToList(); if (helpFiles.Any()) { Directory.SetCurrentDirectory(directory); foreach (var helpFile in helpFiles) { var cmdletFile = helpFile.Substring(0, helpFile.Length - "-Help.xml".Length); var helpFileName = Path.GetFileName(helpFile); var cmdletFileName = Path.GetFileName(cmdletFile); if (File.Exists(cmdletFile)) { processedHelpFiles.Add(helpFileName); helpLogger.Decorator.AddDecorator((h) => { h.HelpFile = helpFileName; h.Assembly = cmdletFileName; }, "Cmdlet"); var proxy = AppDomainHelpers.CreateProxy <CmdletLoader>(directory, out _appDomain); var cmdlets = proxy.GetCmdlets(cmdletFile); var helpRecords = CmdletHelpParser.GetHelpTopics(helpFile, helpLogger); ValidateHelpRecords(cmdlets, helpRecords, helpLogger); helpLogger.Decorator.Remove("Cmdlet"); AppDomain.Unload(_appDomain); } } Directory.SetCurrentDirectory(savedDirectory); } } } }