protected async override void Run() { using (var monitor = IdeApp.Workbench.ProgressMonitors.GetToolOutputProgressMonitor(false)) { monitor.BeginTask(1); try { // We don't want to miss any log messages after reloading the solution var logSummary = new StringBuilder(); var proj = ProjectOperations.CurrentSelectedItem as DotNetProject; logSummary.AppendLine($"Converting {proj.Name}{proj.GetProjFileExtension()} to NET Standard 2.0 format .."); var projFilePath = proj.GetProjFilePath(); logSummary.AppendLine($"Generating new {proj.GetProjFileExtension()}"); var projectTemplate = ProjectTemplateFactory.GetTemplate(proj); logSummary.AppendLine($"Project template detected: {projectTemplate}"); var netStandardProjContent = new NetStandardProjFileGenerator().GenerateProjForNetStandard(projectTemplate.GetPackages); logSummary.AppendLine("Creating backup"); projectTemplate.BackupOldFormatFiles(); logSummary.AppendLine("Deleting old files"); projectTemplate.CleanUpOldFormatFiles(); // Create a new .xproj File.WriteAllText($"{projFilePath}", netStandardProjContent, Encoding.UTF8); // TODO: Programmatically reload the project instead of re-opening. logSummary.AppendLine("Re-opening the project"); await IdeApp.Workspace.Close(true); await IdeApp.Workspace.OpenWorkspaceItem(proj.ParentSolution.FileName); monitor.Log.WriteLine(logSummary); monitor.Log.WriteLine("Please note that .NET Standard 2.0 is supported only from Xamarin.Forms 2.4+."); monitor.Log.WriteLine("More information can be found here: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/internals/net-standard"); monitor.ReportSuccess("Convertion succeed."); } catch (Exception ex) { monitor.ReportError($"Convertion failed. Please create an issue on github: {Consts.ProjectUrl}", ex); } finally { monitor.EndTask(); } } }
protected async override void Run() { using (var monitor = IdeApp.Workbench.ProgressMonitors.GetToolOutputProgressMonitor(false)) { monitor.BeginTask(1); try { var proj = ProjectOperations.CurrentSelectedItem as DotNetProject; monitor.Log.WriteLine($"Converting {proj.Name}{proj.GetProjFileExtension()} to NET Standard 2.0 format .."); monitor.Log.WriteLine(); var projFilePath = proj.GetProjFilePath(); monitor.Log.WriteLine($"Generating new {proj.GetProjFileExtension()}"); monitor.Log.WriteLine(); var netStandardProjContent = new NetStandardProjFileGenerator(proj).GenerateProjForNetStandard(); monitor.Log.WriteLine($"Creating backup"); monitor.Log.WriteLine(); BackupOldFormatFiles(proj); monitor.Log.WriteLine($"Deleting old files"); monitor.Log.WriteLine(); CleanUpOldFormatFiles(proj); // Create a new .xproj File.WriteAllText($"{projFilePath}", netStandardProjContent, Encoding.UTF8); // TODO: Programmatically reload the project instead of re-opening. monitor.Log.WriteLine($"Re-opening the project"); monitor.Log.WriteLine(); await IdeApp.Workspace.Close(true); await IdeApp.Workspace.OpenWorkspaceItem(proj.ParentSolution.FileName); monitor.ReportSuccess("Convertion succeed."); } catch (Exception ex) { monitor.ReportError($"Convertion failed. Please create an issue on github: {Consts.ProjectUrl}", ex); } finally { monitor.EndTask(); } } }