public async Task <bool> RunAsync(IUpgradeContext context, IProject project, CancellationToken token) { if (context is null) { throw new ArgumentNullException(nameof(context)); } if (project is null) { throw new ArgumentNullException(nameof(project)); } var tfm = await _targetFrameworkSelector.SelectTargetFrameworkAsync(project, token).ConfigureAwait(false); // try-convert has no overloads to pass in properties SetEnvironmentVariables(context); var workspaceLoader = new MSBuildConversionWorkspaceLoader(project.FileInfo.FullName, MSBuildConversionWorkspaceType.Project); var msbuildWorkspace = workspaceLoader.LoadWorkspace(project.FileInfo.FullName, noBackup: true, tfm.ToString(), keepCurrentTFMs: true, forceWeb: true); if (msbuildWorkspace.WorkspaceItems.Length is 0) { _logger.LogWarning("No projects were converted to SDK style"); return(false); } foreach (var item in msbuildWorkspace.WorkspaceItems) { _logger.LogInformation("Converting project {Path} to SDK style", item.ProjectRootElement.FullPath); var converter = new Converter(item.UnconfiguredProject, item.SdkBaselineProject, item.ProjectRootElement, noBackup: true, forceRemoveCustomImports: true); converter.Convert(item.ProjectRootElement.FullPath); } return(true); }
private static (IProjectRootElement baselineRootElement, IProjectRootElement convertedRootElement) GetRootElementsForComparison(string projectToConvertPath, string projectBaselinePath, string targetTFM, bool forceWeb) { var conversionLoader = new MSBuildConversionWorkspaceLoader(projectToConvertPath, MSBuildConversionWorkspaceType.Project); var conversionWorkspace = conversionLoader.LoadWorkspace(projectToConvertPath, noBackup: true, targetTFM, false, forceWeb); var baselineLoader = new MSBuildConversionWorkspaceLoader(projectBaselinePath, MSBuildConversionWorkspaceType.Project); var baselineRootElement = baselineLoader.GetRootElementFromProjectFile(projectBaselinePath); var item = conversionWorkspace.WorkspaceItems.Single(); var converter = new Converter(item.UnconfiguredProject, item.SdkBaselineProject, item.ProjectRootElement, noBackup: false); var convertedRootElement = converter.ConvertProjectFile(); return(baselineRootElement, convertedRootElement); }
private static (IProjectRootElement baselineRootElement, IProjectRootElement convertedRootElement) GetRootElementsForComparison(string projectToConvertPath, string projectBaselinePath) { var conversionLoader = new MSBuildConversionWorkspaceLoader(projectToConvertPath, MSBuildConversionWorkspaceType.Project); var conversionWorkspace = conversionLoader.LoadWorkspace(projectToConvertPath, noBackup: true); var baselineLoader = new MSBuildConversionWorkspaceLoader(projectBaselinePath, MSBuildConversionWorkspaceType.Project); var baselineRootElement = baselineLoader.GetRootElementFromProjectFile(projectBaselinePath); var item = conversionWorkspace.WorkspaceItems.Single(); var converter = new Converter(item.UnconfiguredProject, item.SdkBaselineProject, item.ProjectRootElement); var convertedRootElement = converter.ConvertProjectFile("netcoreapp3.1", keepCurrentTfm: false, usePreviewSDK: false); return(baselineRootElement, convertedRootElement); }
public static int Run(string?project, string?workspace, string?msbuildPath, string?tfm, bool allowPreviews, bool diffOnly, bool noBackup, bool keepCurrentTfms) { if (!string.IsNullOrWhiteSpace(project) && !string.IsNullOrWhiteSpace(workspace)) { Console.WriteLine("Cannot specify both a project and a workspace."); return(-1); } if (!string.IsNullOrWhiteSpace(tfm) && keepCurrentTfms) { Console.WriteLine($"Both '{nameof(tfm)}' and '{nameof(keepCurrentTfms)}' cannot be specified. Please pick one."); return(-1); } try { msbuildPath = MSBuildHelpers.HookAssemblyResolveForMSBuild(msbuildPath); if (string.IsNullOrWhiteSpace(msbuildPath)) { Console.WriteLine("Could not find an MSBuild."); return(-1); } if (!string.IsNullOrWhiteSpace(tfm)) { tfm = tfm.Trim(); if (!TargetFrameworkHelper.IsValidTargetFramework(tfm)) { Console.WriteLine($"Invalid framework specified for --target-framework: '{tfm}'"); return(-1); } } var workspacePath = string.Empty; MSBuildConversionWorkspaceType workspaceType; if (!string.IsNullOrWhiteSpace(project)) { workspacePath = Path.GetFullPath(project, Environment.CurrentDirectory); workspaceType = MSBuildConversionWorkspaceType.Project; } else { var(isSolution, workspaceFilePath) = MSBuildConversionWorkspaceFinder.FindWorkspace(Environment.CurrentDirectory, workspace); workspaceType = isSolution ? MSBuildConversionWorkspaceType.Solution : MSBuildConversionWorkspaceType.Project; workspacePath = workspaceFilePath; } var workspaceLoader = new MSBuildConversionWorkspaceLoader(workspacePath, workspaceType); // do not create backup if --diff-only specified noBackup = noBackup || diffOnly; var msbuildWorkspace = workspaceLoader.LoadWorkspace(workspacePath, noBackup); foreach (var item in msbuildWorkspace.WorkspaceItems) { if (diffOnly) { var differ = new Differ(item.UnconfiguredProject.FirstConfiguredProject, item.SdkBaselineProject.Project.FirstConfiguredProject); differ.GenerateReport(Directory.GetParent(workspacePath).FullName); } else { var converter = new Converter(item.UnconfiguredProject, item.SdkBaselineProject, item.ProjectRootElement); converter.Convert(item.ProjectRootElement.FullPath, tfm, keepCurrentTfms, allowPreviews); } } } catch (Exception e) { Console.WriteLine(e.ToString()); return(-1); } Console.WriteLine("Conversion complete!"); return(0); }
public static int Run(string?project, string?workspace, string?msbuildPath, string?tfm, bool forceWebConversion, bool preview, bool diffOnly, bool noBackup, bool keepCurrentTfms, bool update, bool mauiConversion, bool forceRemoveCustomImports) { if (update) { UpdateTryConvert.Update(); return(0); } if (!string.IsNullOrWhiteSpace(project) && !string.IsNullOrWhiteSpace(workspace)) { Console.WriteLine("Cannot specify both a project and a workspace."); return(-1); } if (!string.IsNullOrWhiteSpace(tfm) && keepCurrentTfms) { Console.WriteLine($"Both '{nameof(tfm)}' and '{nameof(keepCurrentTfms)}' cannot be specified. Please pick one."); return(-1); } try { //For Xamarin Projects, set MSBuild path to VSInstallation Dir via Environment Variable if (mauiConversion) { var vsinstalldir = Environment.GetEnvironmentVariable("VSINSTALLDIR"); if (!string.IsNullOrEmpty(vsinstalldir)) { msbuildPath = MSBuildHelpers.HookAssemblyResolveForMSBuild(Path.Combine(vsinstalldir, "MSBuild", "Current", "Bin")); } else { string vsPath = new VisualStudioLocator().GetLatestVisualStudioPath(); if (string.IsNullOrWhiteSpace(vsPath)) { Console.WriteLine("Error locating VS Install Directory. Try setting Environment Variable VSINSTALLDIR."); return(-1); } else { msbuildPath = MSBuildHelpers.HookAssemblyResolveForMSBuild(Path.Combine(vsPath, "MSBuild", "Current", "Bin")); } } } else { msbuildPath = MSBuildHelpers.HookAssemblyResolveForMSBuild(msbuildPath); } if (string.IsNullOrWhiteSpace(msbuildPath)) { Console.WriteLine("Could not find an MSBuild."); return(-1); } if (!string.IsNullOrWhiteSpace(tfm)) { tfm = tfm.Trim(); if (!TargetFrameworkHelper.IsValidTargetFramework(tfm)) { Console.WriteLine($"Invalid framework specified for --target-framework: '{tfm}'"); return(-1); } } else { tfm = TargetFrameworkHelper.FindHighestInstalledTargetFramework(preview, msbuildPath); } var workspacePath = string.Empty; MSBuildConversionWorkspaceType workspaceType; if (!string.IsNullOrWhiteSpace(project)) { workspacePath = Path.GetFullPath(project, Environment.CurrentDirectory); workspaceType = MSBuildConversionWorkspaceType.Project; } else { var(isSolution, workspaceFilePath) = MSBuildConversionWorkspaceFinder.FindWorkspace(Environment.CurrentDirectory, workspace); workspaceType = isSolution ? MSBuildConversionWorkspaceType.Solution : MSBuildConversionWorkspaceType.Project; workspacePath = workspaceFilePath; } var workspaceLoader = new MSBuildConversionWorkspaceLoader(workspacePath, workspaceType); // do not create backup if --diff-only specified noBackup = noBackup || diffOnly; var msbuildWorkspace = workspaceLoader.LoadWorkspace(workspacePath, noBackup, tfm, keepCurrentTfms, forceWebConversion); if (msbuildWorkspace.WorkspaceItems.Length is 0) { Console.WriteLine("No projects converted."); return(0); } foreach (var item in msbuildWorkspace.WorkspaceItems) { if (diffOnly) { var differ = new Differ(item.UnconfiguredProject.FirstConfiguredProject, item.SdkBaselineProject.Project.FirstConfiguredProject); var parent = Directory.GetParent(workspacePath); if (parent is null) { differ.GenerateReport(workspacePath); } else { differ.GenerateReport(parent.FullName); } } else { var converter = new Converter(item.UnconfiguredProject, item.SdkBaselineProject, item.ProjectRootElement, noBackup, forceRemoveCustomImports); converter.Convert(item.ProjectRootElement.FullPath); } } } catch (Exception e) { Console.WriteLine(e.ToString()); return(-1); } Console.WriteLine("Conversion complete!"); return(0); }