public Model.Container GetContainer() { if (IsExcluded()) { Console.WriteLine("Project {0} excluded from task", Options.ProjectName); return(null); } else { var stopWatch = Stopwatch.StartNew(); Console.WriteLine("Processing Project: {0}", Options.ProjectName); if (Options.ProjectDirectory != null) { Console.WriteLine("Using Project Directory: {0}", Options.ProjectDirectory); } Model.Container projectNode = new Model.Container(); projectNode.Name = Options.ProjectUniqueId; projectNode.Version = Options.VersionName; projectNode.SourcePath = Options.TargetPath; projectNode.Type = "Project"; projectNode.OutputPaths = FindOutputPaths(); bool packagesConfigExists = !String.IsNullOrWhiteSpace(Options.PackagesConfigPath) && File.Exists(Options.PackagesConfigPath); bool projectJsonExists = !String.IsNullOrWhiteSpace(Options.ProjectJsonPath) && File.Exists(Options.ProjectJsonPath); bool projectJsonLockExists = !String.IsNullOrWhiteSpace(Options.ProjectJsonLockPath) && File.Exists(Options.ProjectJsonLockPath); bool projectAssetsJsonExists = !String.IsNullOrWhiteSpace(Options.ProjectAssetsJsonPath) && File.Exists(Options.ProjectAssetsJsonPath); if (packagesConfigExists) { Console.WriteLine("Using packages config: " + Options.PackagesConfigPath); var packagesConfigResolver = new PackagesConfigResolver(Options.PackagesConfigPath, NugetService); var packagesConfigResult = packagesConfigResolver.Process(); projectNode.Packages = packagesConfigResult.Packages; projectNode.Dependencies = packagesConfigResult.Dependencies; } else if (projectJsonLockExists) { Console.WriteLine("Using json lock: " + Options.ProjectJsonLockPath); var projectJsonLockResolver = new ProjectLockJsonResolver(Options.ProjectJsonLockPath); var projectJsonLockResult = projectJsonLockResolver.Process(); projectNode.Packages = projectJsonLockResult.Packages; projectNode.Dependencies = projectJsonLockResult.Dependencies; } else if (projectAssetsJsonExists) { Console.WriteLine("Using assets json file: " + Options.ProjectAssetsJsonPath); var projectAssetsJsonResolver = new ProjectAssetsJsonResolver(Options.ProjectAssetsJsonPath); var projectAssetsJsonResult = projectAssetsJsonResolver.Process(); projectNode.Packages = projectAssetsJsonResult.Packages; projectNode.Dependencies = projectAssetsJsonResult.Dependencies; } else if (projectJsonExists) { Console.WriteLine("Using project json: " + Options.ProjectJsonPath); var projectJsonResolver = new ProjectJsonResolver(Options.ProjectName, Options.ProjectJsonPath); var projectJsonResult = projectJsonResolver.Process(); projectNode.Packages = projectJsonResult.Packages; projectNode.Dependencies = projectJsonResult.Dependencies; } else { Console.WriteLine("Attempting reference resolver: " + Options.TargetPath); var referenceResolver = new ProjectReferenceResolver(Options.TargetPath, NugetService); var projectReferencesResult = referenceResolver.Process(); if (projectReferencesResult.Success) { Console.WriteLine("Reference resolver succeeded."); projectNode.Packages = projectReferencesResult.Packages; projectNode.Dependencies = projectReferencesResult.Dependencies; } else { Console.WriteLine("Using backup XML resolver."); var xmlResolver = new ProjectXmlResolver(Options.TargetPath, NugetService); var xmlResult = xmlResolver.Process(); projectNode.Version = xmlResult.ProjectVersion; projectNode.Packages = xmlResult.Packages; projectNode.Dependencies = xmlResult.Dependencies; } } if (projectNode != null && projectNode.Dependencies != null && projectNode.Packages != null) { Console.WriteLine("Found {0} dependencies among {1} packages.", projectNode.Dependencies.Count, projectNode.Packages.Count); } Console.WriteLine("Finished processing project {0} which took {1} ms.", Options.ProjectName, stopWatch.ElapsedMilliseconds); return(projectNode); } }
public Model.Container GetContainer() { Console.WriteLine("Processing Solution: " + Options.TargetPath); var stopwatch = Stopwatch.StartNew(); Model.Container solution = new Model.Container(); solution.Name = Options.SolutionName; solution.SourcePath = Options.TargetPath; solution.Type = "Solution"; try { List <ProjectFile> projectFiles = FindProjectFilesFromSolutionFile(Options.TargetPath, ExcludedProjectTypeGUIDs); Console.WriteLine("Parsed Solution File"); if (projectFiles.Count > 0) { string solutionDirectory = Path.GetDirectoryName(Options.TargetPath); Console.WriteLine("Solution directory: {0}", solutionDirectory); var duplicateNames = projectFiles .GroupBy(project => project.Name) .Where(group => group.Count() > 1) .Select(group => group.Key); var duplicatePaths = projectFiles .GroupBy(project => project.Path) .Where(group => group.Count() > 1) .Select(group => group.Key); foreach (ProjectFile project in projectFiles) { try { string projectRelativePath = project.Path; List <string> projectPathSegments = new List <string>(); projectPathSegments.Add(solutionDirectory); projectPathSegments.Add(projectRelativePath); string projectPath = InspectorUtil.CreatePath(projectPathSegments); string projectName = project.Name; string projectId = projectName; if (duplicateNames.Contains(projectId)) { Console.WriteLine($"Duplicate project name '{projectName}' found. Using GUID instead."); projectId = project.GUID; } Boolean projectFileExists = false; try { projectFileExists = File.Exists(projectPath); } catch (Exception e) { Console.WriteLine("Skipping unknown project path: " + projectPath); continue; } if (!projectFileExists) { Console.WriteLine("Skipping non-existent project path: " + projectPath); continue; } ProjectInspector projectInspector = new ProjectInspector(new ProjectInspectionOptions(Options) { ProjectName = projectName, ProjectUniqueId = projectId, TargetPath = projectPath }, NugetService); InspectionResult projectResult = projectInspector.Inspect(); if (projectResult != null && projectResult.Containers != null) { solution.Children.AddRange(projectResult.Containers); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); if (Options.IgnoreFailure) { Console.WriteLine("Error inspecting project: {0}", project.Path); Console.WriteLine("Error inspecting project. Cause: {0}", ex); } else { throw ex; } } } } else { Console.WriteLine("No project data found for solution {0}", Options.TargetPath); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); if (Options.IgnoreFailure) { Console.WriteLine("Error executing Build BOM task. Cause: {0}", ex); } else { throw ex; } } if (solution != null && solution.Children != null) { Console.WriteLine("Found " + solution.Children.Count + " children."); } Console.WriteLine("Finished processing solution: " + Options.TargetPath); Console.WriteLine("Took " + stopwatch.ElapsedMilliseconds + " ms to process."); return(solution); }