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();
                }
            }
        }
Esempio n. 2
0
        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();
                }
            }
        }