public List ApplyProjectChanges()

in src/PortingAssistant.Client.Porting/PortingProjectFile/PortingProjectFileHandler.cs [53:130]


        public List<PortingResult> ApplyProjectChanges(
            List<ProjectDetails> projects, string solutionPath, string targetFramework,
            bool includeCodeFix,
            Dictionary<string, Tuple<string, string>> upgradeVersions)
        {
            var results = new List<PortingResult>();

            var projectFilesNotFound = projects.Where((p) => !File.Exists(p.ProjectFilePath)).ToList();
            projectFilesNotFound.ForEach((p) => results.Add(new PortingResult
            {
                Message = "File not found.",
                ProjectFile = p.ProjectFilePath,
                ProjectName = Path.GetFileNameWithoutExtension(p.ProjectFilePath),
                Success = false
            }));
            projects = projects.Where((p) => File.Exists(p.ProjectFilePath)).ToList();

            var (projectsWithAccess, noAccessPortingResults) = VerifyFileAccess(projects);
            results.AddRange(noAccessPortingResults);
            projects = projectsWithAccess;

            _logger.LogInformation("Applying porting changes to {0}", projects.Select(p => p.ProjectFilePath).ToList());

            List<PortCoreConfiguration> configs = new List<PortCoreConfiguration>();
            projects.Where(p => !p.IsBuildFailed).ToList().ForEach((proj) =>
            {
                var upgradePackages = upgradeVersions
                    .Where(p => proj.PackageReferences
                    .Exists(package => package.PackageId == p.Key))
                    .ToDictionary(t => t.Key, t => t.Value);

                configs.Add(new PortCoreConfiguration()
                {
                    ProjectPath = proj.ProjectFilePath,
                    UseDefaultRules = true,
                    PackageReferences = upgradePackages,
                    TargetVersions = new List<string> { targetFramework },
                    PortCode = includeCodeFix
                });
            });

            try
            {
                SolutionPort solutionPort = new SolutionPort(solutionPath, configs, _logger);
                solutionPort.Run();
            }
            catch (Exception ex)
            {
                _logger.LogError($"Failed to port projects {projects.Select(p => p.ProjectFilePath).ToList()} with error: {ex}");
                configs.ForEach(config =>
                {
                    if (!projectFilesNotFound.Exists(p => p.ProjectFilePath == config.ProjectPath))
                    {
                        results.Add(new PortingResult
                        {
                            Message = $"porting project with error {ex.Message}",
                            Success = false,
                            ProjectFile = config.ProjectPath,
                            ProjectName = Path.GetFileNameWithoutExtension(config.ProjectPath)
                        });
                    }
                });
                return results;
            }

            //TODO Return result from solution run
            projects.Where(p => !projectFilesNotFound.Exists(proj => proj.ProjectFilePath == p.ProjectFilePath) && !p.IsBuildFailed)
                .ToList().ForEach((p) => results.Add(new PortingResult
                {
                    ProjectFile = p.ProjectFilePath,
                    ProjectName = Path.GetFileNameWithoutExtension(p.ProjectFilePath),
                    Success = true
                }));

            _logger.LogInformation("Completed porting changes to {0}", projects.Select(p => p.ProjectFilePath).ToList());

            return results;
        }