/** * returns a set of projects that a combine contains and a set of projects * that are referenced from combine projects but not part of the combine */ void GetAllProjects (SolutionFolder folder, SolutionConfiguration config, out Set<SolutionFolderItem> projects, out Set<SolutionFolderItem> references) { List<SolutionFolderItem> subitems = new List<SolutionFolderItem> (); GetSubItems (subitems, folder); projects = (Set<SolutionFolderItem>) combineProjects [folder]; if (projects != null) { references = (Set<SolutionFolderItem>) combineReferences [folder]; return; } projects = new Set<SolutionFolderItem>(); references = new Set<SolutionFolderItem>(); foreach (SolutionFolderItem item in subitems) { if (item is SolutionItem) { SolutionItem entry = (SolutionItem) item; if (!config.BuildEnabledForItem (entry)) continue; projects.Add (entry); references.Union (entry.GetReferencedItems (config.Selector)); } else if (item is SolutionFolder) { Set<SolutionFolderItem> subProjects; Set<SolutionFolderItem> subReferences; GetAllProjects ((SolutionFolder)item, config, out subProjects, out subReferences); projects.Union (subProjects); references.Union (subReferences); } } references.Without (projects); combineProjects [folder] = projects; combineReferences [folder] = references; }