private object[] CreateList(SolutionItem solutionItem)
        {
            ArrayList arrayList = new ArrayList();

            arrayList.Add("Any");
            if (solutionItem.ItemType == SolutionItemType.Solution)
            {
                SolutionConfigurations solutionConfigurations = solutionItem.Solution.SolutionBuild.SolutionConfigurations;
                string a = "";
                foreach (SolutionConfiguration solutionConfiguration in solutionConfigurations)
                {
                    if (a != solutionConfiguration.Name)
                    {
                        arrayList.Add(solutionConfiguration.Name);
                        a = solutionConfiguration.Name;
                    }
                }
            }
            else
            {
                object[] array  = (object[])solutionItem.Project.ConfigurationManager.ConfigurationRowNames;
                object[] array2 = array;
                for (int i = 0; i < array2.Length; i++)
                {
                    object value = array2[i];
                    arrayList.Add(value);
                }
            }
            return(arrayList.ToArray());
        }
예제 #2
0
        /// <summary>
        /// Get solution configuration before edit
        /// </summary>
        private void getSolutionPlarformConfig()
        {
            DTE dte = _applicationObject as DTE;

            SolutionConfigurations SGS = dte.Solution.SolutionBuild.SolutionConfigurations;

            foreach (SolutionConfiguration SG in SGS)
            {
                string name = SG.Name;

                SolutionContexts SCS = SG.SolutionContexts;
                foreach (SolutionContext SC in SCS)
                {
                    string cname  = SC.ConfigurationName;
                    string pname  = SC.PlatformName;
                    string prname = SC.ProjectName;

                    configtableentry c = new configtableentry();
                    c.platform   = pname;
                    c.config     = cname;
                    c.deployable = SC.ShouldDeploy;

                    configTable.Add(c);
                }
            }
        }
        public Solution(ITracer tracer, IVsServiceProvider serviceProvider, PerformanceTracer performanceTracer)
        {
            Contract.Requires(tracer != null);
            Contract.Requires(serviceProvider != null);
            Contract.Requires(performanceTracer != null);

            _deferredUpdateThrottle = new DispatcherThrottle(DispatcherPriority.ApplicationIdle, Update);

            _tracer            = tracer;
            _serviceProvider   = serviceProvider;
            _performanceTracer = performanceTracer;

            _specificProjectConfigurations = _projects.ObservableSelectMany(prj => prj.SpecificProjectConfigurations);
            _solutionContexts      = SolutionConfigurations.ObservableSelectMany(cfg => cfg.Contexts);
            _projectConfigurations = _projects.ObservableSelectMany(prj => prj.ProjectConfigurations);

            _solutionEvents = Dte?.Events?.SolutionEvents;
            if (_solutionEvents != null)
            {
                _solutionEvents.Opened         += () => Solution_Changed("Solution opened");
                _solutionEvents.AfterClosing   += () => Solution_Changed("Solution after closing");
                _solutionEvents.ProjectAdded   += _ => Solution_Changed("Project added");
                _solutionEvents.ProjectRemoved += _ => Solution_Changed("Project removed");
                _solutionEvents.ProjectRenamed += (_, __) => Solution_Changed("Project renamed");
            }

            Update();
        }
예제 #4
0
        /// <summary>
        /// Set solution config after edit
        /// </summary>
        private void SolutionPlarformConfig()
        {
            DTE dte = _applicationObject as DTE;

            SolutionConfigurations SGS = dte.Solution.SolutionBuild.SolutionConfigurations;

            foreach (SolutionConfiguration SG in SGS)
            {
                string name = SG.Name;

                SolutionContexts SCS = SG.SolutionContexts;
                foreach (SolutionContext SC in SCS)
                {
                    string cname  = SC.ConfigurationName;
                    string pname  = SC.PlatformName;
                    string prname = SC.ProjectName;

                    configtableentry e = configTable.Find(i => (i.config == cname) && (i.platform == pname));

                    if (e != null)
                    {
                        configTable.Remove(e);
                    }
                    else
                    {
                        SC.ShouldDeploy = true;
                    }
                }
            }
        }
예제 #5
0
        public Solution(ITracer tracer, IVsServiceProvider serviceProvider)
        {
            Contract.Requires(tracer != null);
            Contract.Requires(serviceProvider != null);

            _deferredUpdateThrottle = new DispatcherThrottle(DispatcherPriority.ContextIdle, Update);

            _tracer          = tracer;
            _serviceProvider = serviceProvider;

            _specificProjectConfigurations = Projects.ObservableSelectMany(prj => prj.SpecificProjectConfigurations);
            _solutionContexts             = SolutionConfigurations.ObservableSelectMany(cfg => cfg.Contexts);
            _defaultProjectConfigurations = Projects.ObservableSelect(prj => prj.DefaultProjectConfiguration);
            _projectConfigurations        = new ObservableCompositeCollection <ProjectConfiguration>(_defaultProjectConfigurations, _specificProjectConfigurations);

            _solutionEvents = Dte?.Events?.SolutionEvents;
            if (_solutionEvents != null)
            {
                _solutionEvents.Opened         += Solution_Changed;
                _solutionEvents.AfterClosing   += Solution_Changed;
                _solutionEvents.ProjectAdded   += _ => Solution_Changed();
                _solutionEvents.ProjectRemoved += _ => Solution_Changed();
                _solutionEvents.ProjectRenamed += (_, __) => Solution_Changed();
            }

            Update();
        }
        /// <summary>
        /// Creates the list.
        /// </summary>
        /// <param name="solutionItem">The solution item.</param>
        /// <returns>An array of configuration names.</returns>
        private object[] CreateList(SolutionItem solutionItem)
        {
            ArrayList ret = new ArrayList();

            ret.Add("Any");

            if (solutionItem.ItemType == SolutionItemType.Solution)
            {
                SolutionConfigurations configs = solutionItem.Solution.SolutionBuild.SolutionConfigurations;

                string lastConfigName = "";

                foreach (SolutionConfiguration config in configs)
                {
                    if (lastConfigName != config.Name)
                    {
                        ret.Add(config.Name);
                        lastConfigName = config.Name;
                    }
                }
            }
            else
            {
                object[] names = (object[])solutionItem.Project.ConfigurationManager.ConfigurationRowNames;

                foreach (object o in names)
                {
                    ret.Add(o);
                }
            }

            return(ret.ToArray());
        }
예제 #7
0
        /// <summary>
        /// Handles the Load event of the ShowDependenciesForm control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        private void ShowDependenciesForm_Load(object sender, EventArgs e)
        {
            SolutionConfigurations configurations = null;

            if (ServiceLocator.Instance.ShellHelper.Solution != null &&
                ServiceLocator.Instance.ShellHelper.Solution.SolutionBuild != null)
            {
                configurations = ServiceLocator.Instance.ShellHelper.Solution.SolutionBuild.SolutionConfigurations;
            }

            if (configurations != null && configurations.Count > 0)
            {
                for (int i = 0; i < configurations.Count; i++)
                {
                    cbMode.Items.Add(configurations.Item(i + 1).Name);
                }
            }
            else
            {
                cbMode.Items.Add("*");
            }
            cbMode.SelectedIndex = 0;

            //   cbAction.Items.Add( ReferenceContext.Action.FromLatest );
            cbAction.Items.Add("Repository");
            cbAction.Items.Add("current solution");
            cbAction.SelectedIndex = 1;
        }
        private void PostHandleWebResourceProjects(Project project)
        {
            //Turn off Build option in build configurations
            SolutionConfigurations solutionConfigurations = _dte.Solution.SolutionBuild.SolutionConfigurations;
            string folderProjectFileName = ProjectWorker.GetFolderProjectFileName(project.FullName);

            SolutionWorker.SetBuildConfigurationOff(solutionConfigurations, folderProjectFileName);
        }
        public VisualStudioProject(EnvDTE.Project nativeProject,
			SolutionConfigurations solutionConfigurations)
        {
            this.nativeProject = nativeProject;

            Name = nativeProject.Name;
            SetAvailableConfigurations(solutionConfigurations);
        }
        public VisualStudioProject(EnvDTE.Project nativeProject,
                                   SolutionConfigurations solutionConfigurations)
        {
            this.nativeProject = nativeProject;

            Name = nativeProject.Name;
            SetAvailableConfigurations(solutionConfigurations);
        }
        public void RunFinished()
        {
            using (StreamWriter sw = new StreamWriter(Path.Combine(destinationDirectory, ".sdktools.props")))
            {
                sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>");
                sw.WriteLine("<Project ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">");
                sw.WriteLine("<PropertyGroup>");
                sw.WriteLine("    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>");
                sw.WriteLine($"    <TizenSDKDir>{tpath}</TizenSDKDir>");
                sw.WriteLine("</PropertyGroup>");
                sw.WriteLine("</Project>");
            }

            // Remove wrong Build directory
            Directory.Delete(Path.Combine(destinationDirectory, "Build"), true);

            DTE    dte           = this.projectTizen.DTE;
            string configuration = dte.Solution.SolutionBuild.ActiveConfiguration.Name;
            string splatform     = "";

            foreach (Project p in dte.Solution.Projects)
            {
                string platform = p.ConfigurationManager.ActiveConfiguration.PlatformName;
                switch (platform)
                {
                case "ARM":
                case "x86":
                    splatform = platform;
                    break;

                default:
                    continue;
                }
                break;
            }
            if (splatform == "")
            {
                splatform = "x86";
            }

            SolutionConfigurations scs = dte.Solution.SolutionBuild.SolutionConfigurations;

            foreach (SolutionConfiguration sc in scs)
            {
                foreach (SolutionContext c in sc.SolutionContexts)
                {
                    string pn = c.PlatformName;
                    string cn = c.ConfigurationName;
                    if (cn == configuration && pn == splatform)
                    {
                        sc.Activate();
                    }
                }
            }
        }
예제 #12
0
        /// <summary>
        /// Caches the solution build configs
        /// </summary>
        private void CacheBuildConfigs()
        {
            SolutionConfigurations SolutionConfigs =
                UnrealVSPackage.Instance.DTE.Solution.SolutionBuild.SolutionConfigurations;

            SolutionConfigPlatforms =
                (from SolutionConfiguration2 Sc in SolutionConfigs select Sc.PlatformName).Distinct().ToArray();

            SolutionConfigNames =
                (from SolutionConfiguration2 Sc in SolutionConfigs select Sc.Name).Distinct().ToArray();
        }
예제 #13
0
        private void SynchronizeCollections(bool retryOnErrors)
        {
            Projects.SynchronizeWith(GetProjects(retryOnErrors).ToArray());

            SolutionConfigurations.SynchronizeWith(GetConfigurations().ToArray());

            ProjectProperties.SynchronizeWith(GetProjectProperties().ToArray());

            ProjectTypeGuids.SynchronizeWith(Projects.SelectMany(p => p.ProjectTypeGuids).ToArray());

            UpdateReferences();
        }
 private void SetAvailableConfigurations(SolutionConfigurations solutionConfigurations)
 {
     foreach (SolutionConfiguration2 solutionConfiguration in solutionConfigurations)
     {
         string configuration = solutionConfiguration.Name;
         string platform = solutionConfiguration.PlatformName;
         foreach (SolutionContext solutionContext in solutionConfiguration.SolutionContexts)
             if (solutionContext.ProjectName == nativeProject.UniqueName)
                 AvailableConfigurations.Add(new VisualStudioConfiguration(solutionContext,
                     nativeProject.ConfigurationManager, configuration, platform));
     }
 }
예제 #15
0
        public IReadOnlyList <string> GetSolutionBuildConfigurations()
        {
            List <string>          solutionConfigurationNames = new List <string>();
            SolutionConfigurations solutionConfigurations     = _hierarchy.GetDTEProject().DTE.Solution.SolutionBuild.SolutionConfigurations;

            foreach (SolutionConfiguration2 config in solutionConfigurations)
            {
                solutionConfigurationNames.Add(config.Name);
            }

            return(solutionConfigurationNames);
        }
예제 #16
0
        public static bool SetActiveSolutionConfiguration(string ConfigName, string PlatformName)
        {
            SolutionConfigurations DteSolutionConfigs = UnrealVSPackage.Instance.DTE.Solution.SolutionBuild.SolutionConfigurations;

            foreach (SolutionConfiguration2 SolutionConfig in DteSolutionConfigs)
            {
                if (string.Compare(SolutionConfig.Name, ConfigName, StringComparison.Ordinal) == 0 &&
                    string.Compare(SolutionConfig.PlatformName, PlatformName, StringComparison.Ordinal) == 0)
                {
                    SolutionConfig.Activate();
                    return(true);
                }
            }
            return(false);
        }
 private void SetAvailableConfigurations(SolutionConfigurations solutionConfigurations)
 {
     foreach (SolutionConfiguration2 solutionConfiguration in solutionConfigurations)
     {
         string configuration = solutionConfiguration.Name;
         string platform      = solutionConfiguration.PlatformName;
         foreach (SolutionContext solutionContext in solutionConfiguration.SolutionContexts)
         {
             if (solutionContext.ProjectName == nativeProject.UniqueName)
             {
                 AvailableConfigurations.Add(new VisualStudioConfiguration(solutionContext,
                                                                           nativeProject.ConfigurationManager, configuration, platform));
             }
         }
     }
 }
예제 #18
0
        public static void CreateConfigurationsForAllProjectTargets(IEnumerable <string> targets, Project project)
        {
            Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread();

            if (targets == null || !targets.Any())
            {
                return;
            }

            //*****create a 'target-specific build' solution configuration if not available

            Solution solution = project.DTE.Solution;

            SolutionConfigurations solutionConfigurations      = solution.SolutionBuild.SolutionConfigurations;
            SolutionConfiguration2 targetSpecificConfiguration = solutionConfigurations.OfType <SolutionConfiguration2>()
                                                                 .Where(config => config.Name.Equals(targetBuildConfigName)).FirstOrDefault();

            if (targetSpecificConfiguration == null)
            {
                targetSpecificConfiguration = solutionConfigurations.Add(targetBuildConfigName, string.Empty, false) as SolutionConfiguration2;
                if (targetSpecificConfiguration == null)
                {
                    return;
                }
            }

            foreach (string target in targets)
            {
                CreateConfigurationsForTarget(target, project);
            }

            //***** set project configuration for solution configuration

            foreach (SolutionContext context in targetSpecificConfiguration.SolutionContexts)
            {
                if (context.ProjectName == project.UniqueName)
                {
                    if (context.ConfigurationName.Equals("Release - all Targets", StringComparison.OrdinalIgnoreCase) ||
                        context.ConfigurationName.Equals("Debug - all Targets", StringComparison.OrdinalIgnoreCase))
                    {
                        context.ConfigurationName = string.Format(releaseConfigurationNameRaw, targets.First());
                        break;
                    }
                }
            }
        }
예제 #19
0
        public static void SetBuildConfigurationOff(SolutionConfigurations buildConfigurations, string projectName)
        {
            foreach (SolutionConfiguration buildConfiguration in buildConfigurations)
            {
                if (!string.Equals(buildConfiguration.Name, Resource.Constant_ProjectBuildConfig_Debug, StringComparison.CurrentCultureIgnoreCase) &&
                    !string.Equals(buildConfiguration.Name, Resource.Constant_ProjectBuildConfig_Release, StringComparison.CurrentCultureIgnoreCase))
                {
                    continue;
                }

                SolutionContexts contexts = buildConfiguration.SolutionContexts;
                foreach (SolutionContext solutionContext in contexts)
                {
                    if (solutionContext.ProjectName == projectName)
                    {
                        solutionContext.ShouldBuild = false;
                    }
                }
            }
        }
        public static void SetBuildConfigurationOff(SolutionConfigurations buildConfigurations, string projectName)
        {
            foreach (SolutionConfiguration buildConfiguration in buildConfigurations)
            {
                //Localize these?
                if (buildConfiguration.Name != "Debug" && buildConfiguration.Name != "Release")
                {
                    continue;
                }

                SolutionContexts contexts = buildConfiguration.SolutionContexts;
                foreach (SolutionContext solutionContext in contexts)
                {
                    if (solutionContext.ProjectName == projectName)
                    {
                        solutionContext.ShouldBuild = false;
                    }
                }
            }
        }
예제 #21
0
        public static void GetSolutionConfigsAndPlatforms(out string[] SolutionConfigs, out string[] SolutionPlatforms)
        {
            var UniqueConfigs   = new List <string>();
            var UniquePlatforms = new List <string>();

            SolutionConfigurations DteSolutionConfigs = UnrealVSPackage.Instance.DTE.Solution.SolutionBuild.SolutionConfigurations;

            foreach (SolutionConfiguration2 SolutionConfig in DteSolutionConfigs)
            {
                if (!UniqueConfigs.Contains(SolutionConfig.Name))
                {
                    UniqueConfigs.Add(SolutionConfig.Name);
                }
                if (!UniquePlatforms.Contains(SolutionConfig.PlatformName))
                {
                    UniquePlatforms.Add(SolutionConfig.PlatformName);
                }
            }

            SolutionConfigs   = UniqueConfigs.ToArray();
            SolutionPlatforms = UniquePlatforms.ToArray();
        }
        private async Task SetProjects()
        {
            var loadedProjects = new List <Project>();
            await Task.Run(() =>
            {
                SolutionConfigurations solutionConfigurations = GetSolutionConfigurations();
                var nativeProjects = new List <EnvDTE.Project>();
                NavigateSolution(nativeProjects);
                nativeProjects = nativeProjects.OrderBy(p => p.Name).ToList();
                foreach (var nativeProject in nativeProjects.Select((x, i) => new { Value = x, Index = i }))
                {
                    StatusText = FormatProjectLoadingMessage(nativeProjects.Count, nativeProject.Index,
                                                             nativeProject.Value.Name);
                    loadedProjects.Add(new VisualStudioProject(nativeProject.Value, solutionConfigurations));
                }
            });

            foreach (Project loadedProject in loadedProjects)
            {
                Projects.Add(loadedProject);
            }
            UpdateProjectsSolutionContext();
        }
예제 #23
0
        public AsyncCodeConfiguration ConfigureSolution(string solutionFilePath, Action <IFluentSolutionConfiguration> action)
        {
            if (solutionFilePath == null)
            {
                throw new ArgumentNullException(nameof(solutionFilePath));
            }
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }
            if (!File.Exists(solutionFilePath))
            {
                throw new FileNotFoundException($"Solution not found. Path:'{solutionFilePath}'");
            }
            var solutionConfig = SolutionConfigurations.FirstOrDefault(o => o.Path == solutionFilePath);

            if (solutionConfig == null)
            {
                solutionConfig = new SolutionConfiguration(solutionFilePath);
                SolutionConfigurations.Add(solutionConfig);
            }
            action(solutionConfig);
            return(this);
        }
예제 #24
0
        private List <SolutionInfo> VerifySolution(EnvDTE.DTE dte)
        {
            logger.Info("Checking the solution file");

            // Verfify the target platform
            if (Platform == "Any CPU")
            {
                logger.Error("Platform 'Any CPU' is not supported.");
                return(null);
            }

            // Verify that project configurations are same.
            logger.Info("  Verifying that the configurations of the solution and projects match.");
            var slnBuild = dte.Solution.SolutionBuild as SolutionBuild2;

            if (TargetConfigurations == null)
            {
                TargetConfigurations = slnBuild.SolutionConfigurations
                                       .Cast <SolutionConfiguration2>()
                                       .Where(x => x.PlatformName == Platform)
                                       .Select(x => x.Name).ToArray();
            }

            var projectNamesList           = new List <List <string> >();
            var cfgNamesList               = new List <List <(string slnCfgName, string prjCfgName)> >();
            SolutionConfigurations slnCfgs = slnBuild.SolutionConfigurations;

            foreach (SolutionConfiguration2 slnCfg in slnCfgs)
            {
                if (slnCfg.PlatformName != Platform ||
                    !TargetConfigurations.Contains(slnCfg.Name))
                {
                    continue;
                }

                var projectNames = new List <string>();
                var cfgNames     =
                    new List <(string slnCfgName, string projectCfgName)>();
                foreach (SolutionContext context in slnCfg.SolutionContexts)
                {
                    if (!context.ShouldBuild)
                    {
                        continue;
                    }
                    if (context.PlatformName != Platform)
                    {
                        logger.Error($"The platform of {context.ProjectName} does not match {Platform}.");
                        return(null);
                    }
                    if (context.ConfigurationName != slnCfg.Name)
                    {
                        logger.Info($"  Configuration of {context.ProjectName} does not match ones of the solution.");
                        logger.Info($"    Solution: {slnCfg.Name}");
                        logger.Info($"    Project: {context.ConfigurationName}");
                        logger.Info($"  The configuration name '{context.ConfigurationName}' is replaced by '{slnCfg.Name}'.");
                    }
                    projectNames.Add(context.ProjectName);
                    cfgNames.Add((slnCfg.Name, context.ConfigurationName));
                }

                if (projectNames.Count == 0)
                {
                    logger.Error(
                        $"No project to build contains in configuration {slnCfg.Name}");
                    return(null);
                }

                projectNamesList.Add(projectNames);
                cfgNamesList.Add(cfgNames);
            }

            if (projectNamesList.Count == 0)
            {
                logger.Error($"The solution file does not contain C/C++ projects on platform {Platform}.");
                return(null);
            }

            for (int i = 0; i < projectNamesList.Count; i++)
            {
                projectNamesList[i].Sort();
                if (i > 0)
                {
                    if (!projectNamesList[i].SequenceEqual(projectNamesList[0]))
                    {
                        logger.Error($"The project configurations are different.");
                        return(null);
                    }
                }
            }

            //
            string slnDir           = Path.GetDirectoryName(dte.Solution.FullName);
            var    projectsFullPath = projectNamesList[0].ConvertAll(
                x => Utility.NormalizePath(Path.Combine(slnDir, x))
                .ToLower());

            Projects projects = dte.Solution.Projects;

            // Verifying existance of VC++ project, and platform.
            var solutionInfoList = new List <SolutionInfo>();

            foreach (Project project in projects)
            {
                System.Console.WriteLine(project.Name);
                System.Console.WriteLine(project.FileName);
                System.Console.WriteLine(project.FullName);
                VCProject vcprj = project.Object as VCProject;
                if (vcprj == null)
                {
                    logger.Warn(
                        $"Project '{project.Name}' is not a Visual C++ project.");
                    continue;
                }

                var index = projectsFullPath.FindIndex(
                    x => x == project.FullName.ToLower());
                if (index < 0)
                {
                    continue;
                }

                var solutionInfo = new SolutionInfo();
                solutionInfo.project = project;
                solutionInfo.cfgs    = cfgNamesList.Select(
                    x => (x[index].slnCfgName, x[index].prjCfgName)).ToArray();

                solutionInfoList.Add(solutionInfo);
            }
            if (solutionInfoList.Count() == 0)
            {
                logger.Error("No Visual C++ projects to build.");
                return(null);
            }

            logger.Info("Checking the solution file - done");
            return(solutionInfoList);
        }
 public SolutionConfigurationsNodeFactory(SolutionConfigurations solutionConfigurations)
 {
     _solutionConfigurations = solutionConfigurations;
 }
예제 #26
0
        public static void ExecuteProjectBuild(Project Project,
                                               string SolutionConfig,
                                               string SolutionPlatform,
                                               BatchBuilderToolControl.BuildJob.BuildJobType BuildType,
                                               Action ExecutingDelegate,
                                               Action FailedToStartDelegate)
        {
            IVsHierarchy ProjHierarchy = Utils.ProjectToHierarchyObject(Project);

            if (ProjHierarchy != null)
            {
                SolutionConfigurations SolutionConfigs =
                    UnrealVSPackage.Instance.DTE.Solution.SolutionBuild.SolutionConfigurations;

                var MatchedSolutionConfig =
                    (from SolutionConfiguration2 Sc in SolutionConfigs select Sc).FirstOrDefault(
                        Sc =>
                        String.CompareOrdinal(Sc.Name, SolutionConfig) == 0 && String.CompareOrdinal(Sc.PlatformName, SolutionPlatform) == 0);

                if (MatchedSolutionConfig != null)
                {
                    SolutionContext ProjectSolutionCtxt = MatchedSolutionConfig.SolutionContexts.Item(Project.UniqueName);

                    if (ProjectSolutionCtxt != null)
                    {
                        IVsCfgProvider2 CfgProvider2 = Utils.HierarchyObjectToCfgProvider(ProjHierarchy);
                        if (CfgProvider2 != null)
                        {
                            IVsCfg Cfg;
                            CfgProvider2.GetCfgOfName(ProjectSolutionCtxt.ConfigurationName, ProjectSolutionCtxt.PlatformName, out Cfg);

                            if (Cfg != null)
                            {
                                if (ExecutingDelegate != null)
                                {
                                    ExecutingDelegate();
                                }

                                int JobResult = VSConstants.E_FAIL;

                                if (BuildType == BatchBuilderToolControl.BuildJob.BuildJobType.Build)
                                {
                                    JobResult =
                                        UnrealVSPackage.Instance.SolutionBuildManager.StartUpdateSpecificProjectConfigurations(
                                            1,
                                            new[] { ProjHierarchy },
                                            new[] { Cfg },
                                            null,
                                            new uint[] { 0 },
                                            null,
                                            (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD,
                                            0);
                                }
                                else if (BuildType == BatchBuilderToolControl.BuildJob.BuildJobType.Rebuild)
                                {
                                    JobResult =
                                        UnrealVSPackage.Instance.SolutionBuildManager.StartUpdateSpecificProjectConfigurations(
                                            1,
                                            new[] { ProjHierarchy },
                                            new[] { Cfg },
                                            new uint[] { 0 },
                                            null,
                                            null,
                                            (uint)(VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_BUILD | VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_FORCE_UPDATE),
                                            0);
                                }
                                else if (BuildType == BatchBuilderToolControl.BuildJob.BuildJobType.Clean)
                                {
                                    JobResult =
                                        UnrealVSPackage.Instance.SolutionBuildManager.StartUpdateSpecificProjectConfigurations(
                                            1,
                                            new[] { ProjHierarchy },
                                            new[] { Cfg },
                                            new uint[] { 0 },
                                            null,
                                            null,
                                            (uint)VSSOLNBUILDUPDATEFLAGS.SBF_OPERATION_CLEAN,
                                            0);
                                }

                                if (JobResult == VSConstants.S_OK)
                                {
                                    // Job running - show output
                                    PrepareOutputPane();
                                }
                                else
                                {
                                    if (FailedToStartDelegate != null)
                                    {
                                        FailedToStartDelegate();
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }