private void SanityCheckBuildJobs(Project[] CheckProjects)
        {
            // check that project, config and platform strings in build jobs are valid
            // remove invalid ones
            string[] SolutionConfigs;
            string[] SolutionPlatforms;
            Utils.GetSolutionConfigsAndPlatforms(out SolutionConfigs, out SolutionPlatforms);

            foreach (var JobSet in _BuildJobSetsCollection)
            {
                for (int JobIdx = JobSet.BuildJobs.Count - 1; JobIdx >= 0; JobIdx--)
                {
                    BuildJob Job = JobSet.BuildJobs[JobIdx];

                    bool bProjectOkay  = CheckProjects.Any(Proj => String.CompareOrdinal(Job.Project.FullName, Proj.FullName) == 0);
                    bool bConfigOkay   = SolutionConfigs.Any(Config => String.CompareOrdinal(Job.Config, Config) == 0);
                    bool bPlatformOkay = SolutionPlatforms.Any(Platform => String.CompareOrdinal(Job.Platform, Platform) == 0);

                    if (!bProjectOkay || !bConfigOkay || !bPlatformOkay)
                    {
                        JobSet.BuildJobs.RemoveAt(JobIdx);
                    }
                }
            }
        }
        private void RefreshConfigAndPlatformCollections()
        {
            _ConfigCollection.Clear();
            _PlatformCollection.Clear();

            if (!IsSolutionOpen)
            {
                _BuildJobSetsCollection.Clear();
            }

            string[] RefreshConfigs;
            string[] RefreshPlatforms;
            Utils.GetSolutionConfigsAndPlatforms(out RefreshConfigs, out RefreshPlatforms);

            foreach (string Config in RefreshConfigs)
            {
                _ConfigCollection.Add(Config);
            }
            foreach (string Platform in RefreshPlatforms)
            {
                _PlatformCollection.Add(Platform);
            }

            EnsureDefaultBuildJobSet();
        }