public IEnumerable <ResolvedProject> GetResolvedProjects(IEnumerable <Configuration> solutionConfigurations, out bool projectsWereFiltered) { if (!_dependenciesResolved) { throw new InternalError("Solution not resolved: {0}", GetType().FullName); } projectsWereFiltered = false; var result = new Dictionary <string, ResolvedProject>(); Dictionary <Project.Configuration, ResolvedProject> configurationsToProjects = new Dictionary <Project.Configuration, ResolvedProject>(); foreach (Configuration solutionConfiguration in solutionConfigurations) { foreach (Configuration.IncludedProjectInfo includedProjectInfo in solutionConfiguration.IncludedProjectInfos) { if (solutionConfiguration.IncludeOnlyFilterProject && !(includedProjectInfo.Project.IsFastBuildAll) && (includedProjectInfo.Project.SourceFilesFiltersCount == 0 || includedProjectInfo.Project.SkipProjectWhenFiltersActive)) { projectsWereFiltered = true; continue; } ResolvedProject resolvedProject = result.GetValueOrAdd( includedProjectInfo.Configuration.ProjectFullFileName, new ResolvedProject { Project = includedProjectInfo.Project, TargetDefault = includedProjectInfo.Target, OriginalProjectFile = includedProjectInfo.Configuration.ProjectFullFileName, ProjectFile = Util.GetCapitalizedPath(includedProjectInfo.Configuration.ProjectFullFileNameWithExtension), ProjectName = includedProjectInfo.Configuration.ProjectName, SolutionFolder = includedProjectInfo.SolutionFolder, SolutionFolderOverride = includedProjectInfo.SolutionFolder }); resolvedProject.Configurations.Add(includedProjectInfo.Configuration); if (!configurationsToProjects.ContainsKey(includedProjectInfo.Configuration)) { configurationsToProjects[includedProjectInfo.Configuration] = resolvedProject; } } } foreach (ResolvedProject resolvedProject in result.Values) { foreach (Project.Configuration resolvedProjectConf in resolvedProject.Configurations) { // If the solution provides the folder, the configuration should be ignored if (string.IsNullOrEmpty(resolvedProject.SolutionFolderOverride)) { // Folder must all be the same for all config, else will be emptied. if (string.IsNullOrEmpty(resolvedProject.SolutionFolder) && !string.IsNullOrEmpty(resolvedProjectConf.SolutionFolder)) { resolvedProject.SolutionFolder = resolvedProjectConf.SolutionFolder; } else if (resolvedProject.SolutionFolder != resolvedProjectConf.SolutionFolder) { resolvedProject.SolutionFolder = ""; } } foreach (Project.Configuration dependencyConfiguration in resolvedProjectConf.ResolvedDependencies) { if (configurationsToProjects.ContainsKey(dependencyConfiguration)) { var resolvedProjectToAdd = configurationsToProjects[dependencyConfiguration]; if (!resolvedProject.Dependencies.Contains(resolvedProjectToAdd)) { resolvedProject.Dependencies.Add(resolvedProjectToAdd); } } } } } return(result.Values); }
public IEnumerable <ResolvedProject> GetResolvedProjects(IEnumerable <Configuration> solutionConfigurations, out bool projectsWereFiltered) { if (!_dependenciesResolved) { throw new InternalError("Solution not resolved: {0}", GetType().FullName); } projectsWereFiltered = false; List <ResolvedProject> result = new List <ResolvedProject>(); foreach (Configuration solutionConfiguration in solutionConfigurations) { foreach (Configuration.IncludedProjectInfo includedProjectInfo in solutionConfiguration.IncludedProjectInfos) { if (solutionConfiguration.IncludeOnlyFilterProject && !(includedProjectInfo.Project is FastBuildAllProject) && (includedProjectInfo.Project.SourceFilesFiltersCount == 0 || includedProjectInfo.Project.SkipProjectWhenFiltersActive)) { projectsWereFiltered = true; continue; } ResolvedProject resolvedProject = result.Find(p => p.OriginalProjectFile == includedProjectInfo.Configuration.ProjectFullFileName); if (resolvedProject == null) { resolvedProject = new ResolvedProject { Project = includedProjectInfo.Project, TargetDefault = includedProjectInfo.Target, OriginalProjectFile = includedProjectInfo.Configuration.ProjectFullFileName, ProjectFile = Util.GetCapitalizedPath(includedProjectInfo.Configuration.ProjectFullFileNameWithExtension), ProjectName = includedProjectInfo.Configuration.ProjectName }; result.Add(resolvedProject); } resolvedProject.Configurations.Add(includedProjectInfo.Configuration); } } foreach (ResolvedProject resolvedProject in result) { // Folder must all be the same for all config, else will be emptied. foreach (Project.Configuration projectConfiguration in resolvedProject.Configurations) { if (resolvedProject.SolutionFolder == null) { resolvedProject.SolutionFolder = projectConfiguration.SolutionFolder; } else if (resolvedProject.SolutionFolder != projectConfiguration.SolutionFolder) { resolvedProject.SolutionFolder = ""; } } foreach (Project.Configuration resolvedProjectConf in resolvedProject.Configurations) { foreach (Project.Configuration dependencyConfiguration in resolvedProjectConf.ResolvedDependencies) { foreach (ResolvedProject resolvedProjectToAdd in result) { if (resolvedProjectToAdd.Configurations.Contains(dependencyConfiguration)) { if (!resolvedProject.Dependencies.Contains(resolvedProjectToAdd)) { resolvedProject.Dependencies.Add(resolvedProjectToAdd); } } } } } } return(result); }