Exemplo n.º 1
0
        public async Task MultiRunConfig_ReloadProject_ProjectRunConfigUpdatedInMultiRunConfig()
        {
            string solFile = Util.GetSampleProject("test-multi-run-config-reload", "test-multi-run-config-reload.sln");

            using (var sol = (Solution)await Services.ProjectService.ReadWorkspaceItem(Util.GetMonitor(), solFile)) {
                var projectA = (DotNetProject)sol.FindProjectByName("ProjectA");
                var projectB = (DotNetProject)sol.FindProjectByName("ProjectB");
                Assert.IsNotNull(projectA);
                Assert.IsNotNull(projectB);

                var multiRunConfig = new MultiItemSolutionRunConfiguration("MultiTestId", "multi");
                var startupItem1   = new StartupItem(projectA, projectA.RunConfigurations.Single());
                multiRunConfig.Items.Add(startupItem1);

                var startupItem2 = new StartupItem(projectB, projectB.RunConfigurations.Single());
                multiRunConfig.Items.Add(startupItem2);

                sol.MultiStartupRunConfigurations.Add(multiRunConfig);

                await sol.RootFolder.ReloadItem(Util.GetMonitor(), projectA);

                // Ensure latest project instance is used by getting them from the solution again.
                projectA = (DotNetProject)sol.FindProjectByName("ProjectA");
                projectB = (DotNetProject)sol.FindProjectByName("ProjectB");

                var runConfigA = multiRunConfig.Items.Single(item => item.SolutionItem == projectA);
                Assert.AreEqual(projectA.RunConfigurations.Single(), runConfigA.RunConfiguration, "Multi-run config does not match project's run config (ProjectA)");

                var runConfigB = multiRunConfig.Items.Single(item => item.SolutionItem == projectB);
                Assert.AreEqual(projectB.RunConfigurations.Single(), runConfigB.RunConfiguration, "Multi-run config does not match project's run config (ProjectB)");
            }
        }
Exemplo n.º 2
0
        protected internal override void OnExecute(IProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            if (SingleStartup)
            {
                if (StartupItem == null)
                {
                    monitor.ReportError(GettextCatalog.GetString("Startup item not set"), null);
                    return;
                }
                StartupItem.Execute(monitor, context, configuration);
            }
            else
            {
                List <IAsyncOperation> list = new List <IAsyncOperation> ();
                monitor.BeginTask("Executing projects", 1);

                SynchronizedProgressMonitor syncMonitor = new SynchronizedProgressMonitor(monitor);

                foreach (SolutionEntityItem it in MultiStartupItems)
                {
                    if (!it.CanExecute(context, configuration))
                    {
                        continue;
                    }
                    AggregatedProgressMonitor mon = new AggregatedProgressMonitor();
                    mon.AddSlaveMonitor(syncMonitor, MonitorAction.ReportError | MonitorAction.ReportWarning | MonitorAction.SlaveCancel);
                    list.Add(mon.AsyncOperation);
                    SolutionEntityItem cit = it;

                    Thread t = new Thread(delegate()
                    {
                        try
                        {
                            using (mon)
                            {
                                cit.Execute(mon, context, configuration);
                            }
                        }
                        catch (Exception ex)
                        {
                            LoggingService.LogError("Project execution failed", ex);
                        }
                    });
                    t.Name         = "Project execution";
                    t.IsBackground = true;
                    t.Start();
                }
                foreach (IAsyncOperation op in list)
                {
                    op.WaitForCompleted();
                }

                monitor.EndTask();
            }
        }
Exemplo n.º 3
0
        void SetupNewItem(SolutionItem item, SolutionItem replacedItem)
        {
            ConvertToSolutionFormat(item, false);

            SolutionEntityItem eitem = item as SolutionEntityItem;

            if (eitem != null)
            {
                eitem.NeedsReload = false;
                if (eitem.SupportsConfigurations() || replacedItem != null)
                {
                    if (replacedItem == null)
                    {
                        // Register the new entry in every solution configuration
                        foreach (SolutionConfiguration conf in Configurations)
                        {
                            conf.AddItem(eitem);
                        }
                        // If there is no startup project or it is an invalid one, use the new project as startup if possible
                        if ((StartupItem == null || !StartupItem.SupportsExecute()) && eitem.SupportsExecute())
                        {
                            StartupItem = eitem;
                        }
                    }
                    else
                    {
                        // Reuse the configuration information of the replaced item
                        foreach (SolutionConfiguration conf in Configurations)
                        {
                            conf.ReplaceItem((SolutionEntityItem)replacedItem, eitem);
                        }
                        if (StartupItem == replacedItem)
                        {
                            StartupItem = eitem;
                        }
                        else
                        {
                            int i = MultiStartupItems.IndexOf((SolutionEntityItem)replacedItem);
                            if (i != -1)
                            {
                                MultiStartupItems [i] = eitem;
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        /*protected virtual*/ async Task OnExecute(ProgressMonitor monitor, ExecutionContext context, ConfigurationSelector configuration)
        {
            if (SingleStartup)
            {
                if (StartupItem == null)
                {
                    monitor.ReportError(GettextCatalog.GetString("Startup item not set"), null);
                    return;
                }
                await StartupItem.Execute(monitor, context, configuration);
            }
            else
            {
                var tasks    = new List <Task> ();
                var monitors = new List <AggregatedProgressMonitor> ();
                monitor.BeginTask("Executing projects", 1);

                foreach (SolutionItem it in MultiStartupItems)
                {
                    if (!it.CanExecute(context, configuration))
                    {
                        continue;
                    }
                    AggregatedProgressMonitor mon = new AggregatedProgressMonitor();
                    mon.AddSlaveMonitor(monitor, MonitorAction.ReportError | MonitorAction.ReportWarning | MonitorAction.SlaveCancel);
                    monitors.Add(mon);
                    tasks.Add(it.Execute(mon, context, configuration));
                }
                try {
                    await Task.WhenAll(tasks);
                } catch (Exception ex) {
                    LoggingService.LogError("Project execution failed", ex);
                } finally {
                    foreach (var m in monitors)
                    {
                        m.Dispose();
                    }
                }

                monitor.EndTask();
            }
        }
Exemplo n.º 5
0
 protected internal override bool OnGetCanExecute(ExecutionContext context, ConfigurationSelector configuration)
 {
     if (SingleStartup)
     {
         if (StartupItem == null)
         {
             return(false);
         }
         return(StartupItem.CanExecute(context, configuration));
     }
     else
     {
         foreach (SolutionEntityItem it in MultiStartupItems)
         {
             if (it.CanExecute(context, configuration))
             {
                 return(true);
             }
         }
         return(false);
     }
 }