public List <ProjectInfo> GetAllDependenciesRequiredForProject(List <string> codeRootsFolders, List <string> excludeProjectFolders, string projectName, bool includeTestProjects, IEnumerable <string> projectExclusionList) { var projects = codeRootsFolders.Where(Directory.Exists).SelectMany(CsProjHelpers.GetAllProjects) .Where(x => !projectExclusionList.Any(x.Contains)) .Where(x => !excludeProjectFolders.Any(x.Contains)) .Select(x => new ProjectInfo { ProjectName = x, PackageName = CsProjHelpers.GetPackageNameFromCsProj(x), PackageReferences = CsProjHelpers.ReadAllPackageReferencesFromCsProjFile(x), ProjectReferences = CsProjHelpers.ReadAllProjectReferencesFromCsProjFile(x), }).ToList(); // Filter package references by projects we know about (ie. not 3rd party ones) foreach (var project in projects) { project.PackageReferences = project.PackageReferences.Where(d => projects.Any(p => p.PackageName.ToLower() == d.ToLower())).ToList(); } var projectLookup = projects.ToDictionary(k => k.PackageName.ToLower(), v => v); var results = new List <ProjectInfo>(); if (!projectLookup.ContainsKey(projectName.ToLower())) { return(results); // This suggests that the 'coderootfolder' specified by the user doesn't contain a git repo with the selected project that they want to munge } // Recursively scan through all the projects, building up a list of non-3rd-party dependencies GetDependenciesRecursively(projectLookup, projectName, includeTestProjects, results); return(results.Distinct().OrderBy(x => x.PackageName).ToList()); }