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);
            }
        }
示例#2
0
        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);
            }
        }