string FindItemConfiguration(List <IExtendedDataItem> chain, string configId)
 {
     for (int n = 0; n < chain.Count - 1; n++)
     {
         CombineConfigurationSet configs = (CombineConfigurationSet)chain[n].ExtendedProperties ["Configurations"];
         if (configs == null)
         {
             return(null);
         }
         SolutionItem         item          = (SolutionItem)chain [n + 1];
         CombineConfiguration combineConfig = configs.GetConfig(configId);
         if (combineConfig == null)
         {
             monitor.ReportWarning("Configuration '" + configId + "' not found in solution item '" + item.Name + "'.");
             return(null);
         }
         string mappedConfigId = combineConfig.GetMappedConfig(item.Name);
         if (mappedConfigId == null)
         {
             return(null);
         }
         if (mappedConfigId != string.Empty)
         {
             configId = mappedConfigId;
         }
     }
     return(configId);
 }
        CombineConfigurationSet CreateCombineConfigurationSet(Solution sol, bool isRoot)
        {
            CombineConfigurationSet cset = new CombineConfigurationSet();

            foreach (SolutionConfiguration conf in sol.Configurations)
            {
                CombineConfiguration cc = new CombineConfiguration();
                cc.Name = conf.Id;
                if (isRoot)
                {
                    cc.SolutionConfiguration = conf;
                }
                cset.Configurations.Add(cc);
            }
            return(cset);
        }
        void CreateCombineConfigurations(SolutionFolder folder)
        {
            IDictionary extendedProperties = folder.ExtendedProperties;

            CombineConfigurationSet configs = CreateCombineConfigurationSet(folder.ParentSolution, folder.IsRoot);

            configs.Active = folder.ParentSolution.DefaultConfigurationId;

            extendedProperties ["Configurations"] = configs;

            foreach (SolutionItem it in folder.Items)
            {
                if (it is SolutionFolder)
                {
                    foreach (SolutionConfiguration conf in folder.ParentSolution.Configurations)
                    {
                        CombineConfiguration      cc = configs.GetConfig(conf.Id);
                        CombineConfigurationEntry ce = new CombineConfigurationEntry(it.Name, true, conf.Id);
                        cc.Entries.Add(ce);
                    }
                    CreateCombineConfigurations((SolutionFolder)it);
                }
                else if (it is SolutionEntityItem)
                {
                    SolutionEntityItem sit = (SolutionEntityItem)it;
                    foreach (SolutionConfiguration conf in folder.ParentSolution.Configurations)
                    {
                        CombineConfiguration       cc  = configs.GetConfig(conf.Id);
                        SolutionConfigurationEntry sce = conf.GetEntryForItem(sit);
                        CombineConfigurationEntry  ce  = null;
                        if (sce == null)
                        {
                            ce = new CombineConfigurationEntry(it.Name, true, conf.Id);
                        }
                        else
                        {
                            ce = new CombineConfigurationEntry(it.Name, sce.Build, sce.ItemConfiguration);
                        }
                        cc.Entries.Add(ce);
                    }
                }
            }
        }
        void CreateSolutionConfigurations(Solution sol)
        {
            CombineConfigurationSet configs = (CombineConfigurationSet)sol.ExtendedProperties ["Configurations"];

            foreach (CombineConfiguration config in configs.Configurations)
            {
                SolutionConfiguration sconf = config.SolutionConfiguration ?? new SolutionConfiguration(config.Name);
                sol.Configurations.Add(sconf);
            }

            foreach (SolutionEntityItem item in sol.GetAllSolutionItems <SolutionEntityItem> ())
            {
                List <IExtendedDataItem> chain = new List <IExtendedDataItem> ();
                SolutionItem             it    = item;
                while (it != null)
                {
                    chain.Insert(0, it);
                    it = it.ParentFolder;
                }
                chain [0] = sol;

                foreach (SolutionConfiguration sconfig in sol.Configurations)
                {
                    SolutionConfigurationEntry se = sconfig.AddItem(item);
                    string itemConfig             = FindItemConfiguration(chain, sconfig.Id);
                    if (itemConfig != null)
                    {
                        se.Build             = true;
                        se.ItemConfiguration = itemConfig;
                    }
                    else
                    {
                        se.Build = false;
                    }
                }
            }

            sol.DefaultConfigurationId = configs.Active;
        }
		CombineConfigurationSet CreateCombineConfigurationSet (Solution sol, bool isRoot)
		{
			CombineConfigurationSet cset = new CombineConfigurationSet ();
			foreach (SolutionConfiguration conf in sol.Configurations) {
				CombineConfiguration cc = new CombineConfiguration ();
				cc.Name = conf.Id;
				if (isRoot)
					cc.SolutionConfiguration = conf;
				cset.Configurations.Add (cc);
			}
			return cset;
		}