public async Task <SolutionAnalysisResult> AnalyzeSolutionAsync(string solutionFilePath, AnalyzerSettings settings) { try { var solution = SolutionFile.Parse(solutionFilePath); var failedProjects = new List <string>(); var projects = solution.ProjectsInOrder.Where(p => (p.ProjectType == SolutionProjectType.KnownToBeMSBuildFormat || p.ProjectType == SolutionProjectType.WebProject) && (settings.IgnoreProjects?.Contains(p.AbsolutePath) != true)) .Select(p => p.AbsolutePath) .ToList(); var targetFramework = settings.TargetFramework ?? "netcoreapp3.1"; var projectAnalysisResultsDict = await _analysisHandler.AnalyzeSolution(solutionFilePath, projects, targetFramework); var projectAnalysisResults = projects.Select(p => { var projectAnalysisResult = projectAnalysisResultsDict.GetValueOrDefault(p, null); if (projectAnalysisResult != null) { if (projectAnalysisResult.IsBuildFailed) { failedProjects.Add(p); } return(projectAnalysisResult); } return(null); }).Where(p => p != null).ToList(); var solutionDetails = new SolutionDetails { SolutionName = Path.GetFileNameWithoutExtension(solutionFilePath), SolutionFilePath = solutionFilePath, Projects = projectAnalysisResults.ConvertAll(p => new ProjectDetails { PackageReferences = p.PackageReferences, ProjectFilePath = p.ProjectFilePath, ProjectGuid = p.ProjectGuid, ProjectName = p.ProjectName, ProjectReferences = p.ProjectReferences, ProjectType = p.ProjectType, TargetFrameworks = p.TargetFrameworks, IsBuildFailed = p.IsBuildFailed }), FailedProjects = failedProjects }; return(new SolutionAnalysisResult { FailedProjects = failedProjects, SolutionDetails = solutionDetails, ProjectAnalysisResults = projectAnalysisResults }); } catch (Exception ex) { throw new PortingAssistantException($"Cannot Analyze solution {solutionFilePath}", ex); } }
public async Task <SolutionAnalysisResult> AnalyzeSolutionAsync(string solutionFilePath, AnalyzerSettings settings) { try { var solution = SolutionFile.Parse(solutionFilePath); var failedProjects = new List <string>(); var projects = ProjectsToAnalyze(solutionFilePath, settings); var targetFramework = settings.TargetFramework ?? DEFAULT_TARGET; Dictionary <string, ProjectAnalysisResult> projectAnalysisResultsDict; if (settings.ContiniousEnabled) { projectAnalysisResultsDict = await _analysisHandler.AnalyzeSolutionIncremental(solutionFilePath, projects, targetFramework); } else { projectAnalysisResultsDict = await _analysisHandler.AnalyzeSolution(solutionFilePath, projects, targetFramework); } var projectAnalysisResults = projects.Select(p => { var projectAnalysisResult = projectAnalysisResultsDict.GetValueOrDefault(p, null); if (projectAnalysisResult != null) { if (projectAnalysisResult.IsBuildFailed) { failedProjects.Add(p); } return(projectAnalysisResult); } return(null); }).Where(p => p != null).ToList(); string solutionGuid = FileParser.SolutionFileParser.getSolutionGuid(solutionFilePath); var solutionDetails = new SolutionDetails { SolutionName = Path.GetFileNameWithoutExtension(solutionFilePath), SolutionFilePath = solutionFilePath, SolutionGuid = solutionGuid, RepositoryUrl = FileParser.GitConfigFileParser.getGitRepositoryUrl( FileParser.GitConfigFileParser.getGitRepositoryRootPath(solutionFilePath)), ApplicationGuid = solutionGuid ?? Utils.HashUtils.GenerateGuid( projectAnalysisResults.Select(p => p.ProjectGuid).ToList()), Projects = projectAnalysisResults.ConvertAll(p => new ProjectDetails { PackageReferences = p.PackageReferences, ProjectFilePath = p.ProjectFilePath, ProjectGuid = p.ProjectGuid, FeatureType = p.FeatureType, ProjectName = p.ProjectName, ProjectReferences = p.ProjectReferences, ProjectType = p.ProjectType, TargetFrameworks = p.TargetFrameworks, IsBuildFailed = p.IsBuildFailed }), FailedProjects = failedProjects }; return(new SolutionAnalysisResult { FailedProjects = failedProjects, SolutionDetails = solutionDetails, ProjectAnalysisResults = projectAnalysisResults }); } catch (Exception ex) { throw new PortingAssistantException($"Cannot Analyze solution {solutionFilePath}", ex); } }