コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }