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;
}