示例#1
0
 public void AddAll(ProjectConfigSet configs)
 {
     foreach (var config in configs)
     {
         GetOrAdd(config, configs);
     }
 }
        private static async Task Build(
            string packagePath,
            bool verbose,
            bool allowParallel,
            int?maxConcurrency)
        {
            var configs = new ProjectConfigSet();

            configs.Load(packagePath);
            var projectSet = new ProjectSet();

            projectSet.AddAll(configs);
            var taskScheduler = NewTaskScheduler(
                allowParallel,
                maxConcurrency);
            await projectSet.Build(taskScheduler, verbose);
        }
示例#3
0
        private Project GetOrAdd(ProjectConfig config, ProjectConfigSet configs)
        {
            var projectDir = Path.GetDirectoryName(config.FullPath);

            if (projects.TryGetValue(projectDir, out var existingProject))
            {
                return(existingProject);
            }

            // Add a placeholder to prevent cycles
            projects.Add(projectDir, null);
            var dependencies = config.Dependencies.Select(d =>
            {
                var dependencyConfig  = configs.AtPath(d.Value.Path);
                var dependencyProject = GetOrAdd(dependencyConfig, configs);
                return(new ProjectReference(d.Key, dependencyProject, d.Value.Trusted));
            }).ToList();

            var project = new Project(config, dependencies);

            projects[projectDir] = project;
            return(project);
        }
示例#4
0
        private Project GetOrAdd(ProjectConfig config, ProjectConfigSet configs)
        {
            var projectDir = Path.GetDirectoryName(config.FullPath) ?? throw new InvalidOperationException("Null directory name");

            if (projects.TryGetValue(projectDir, out var existingProject))
            {
                return(existingProject);
            }

            // Add a placeholder to prevent cycles (safe because we will replace it below
            projects.Add(projectDir, null !);
            var dependencies = config.Dependencies.Select(d =>
            {
                var(name, config)     = d;
                var dependencyConfig  = configs[name];
                var dependencyProject = GetOrAdd(dependencyConfig, configs);
                return(new ProjectReference(name, dependencyProject, config?.Trusted ?? throw new InvalidOperationException()));
            }).ToList();

            var project = new Project(config, dependencies);

            projects[projectDir] = project;
            return(project);
        }