protected override BuildResult DoBuild(IProgressMonitor monitor, ConfigurationSelector configuration) { // Handle pending events to ensure that files get saved right before the project is built DispatchService.RunPendingEvents(); // Build projects this project is depending on if (alreadyBuiltProjects.Contains(ItemId)) { return new BuildResult() { FailedBuildCount = 1, CompilerOutput = "Circular dependency detected!" } } ; alreadyBuiltProjects.Add(ItemId); BuildResult bs; foreach (var prj in DependingProjects) { if ((bs = prj.Build(monitor, configuration)) == null || bs.Failed) { return bs ?? new BuildResult { FailedBuildCount = 1 } } } ; alreadyBuiltProjects.Remove(ItemId); return(ProjectBuilder.CompileProject(monitor, this, configuration)); }