diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs index 0d51fcf858..fa8e17311e 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine/ParallelMSBuildManager.cs @@ -94,8 +94,6 @@ namespace ICSharpCode.SharpDevelop.Project #endif }; parameters.EnableNodeReuse = false; - // parallel build seems to break in-memory modifications of the project (additionalTargetFiles+_ComputeNonExistentFileProperty), - // so we keep it disabled for the moment. parameters.MaxNodeCount = BuildOptions.DefaultParallelProjectCount; BuildManager.DefaultBuildManager.BeginBuild(parameters); } diff --git a/src/Main/Base/Project/Src/Services/ParserService/LoadSolutionProjects.cs b/src/Main/Base/Project/Src/Services/ParserService/LoadSolutionProjects.cs index 0047240912..114f5b322d 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/LoadSolutionProjects.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/LoadSolutionProjects.cs @@ -205,37 +205,35 @@ namespace ICSharpCode.SharpDevelop void RunThread() { - try { - while (true) { - CancellationToken token; - JobTask task; - int totalWork, workDone; - lock (lockObj) { - if (actions.Count == 0) { - this.threadIsRunning = false; - progressMonitor.Done(); - return; - } - task = this.actions.Dequeue(); - token = this.cancellationSource.Token; - totalWork = this.totalWork; - workDone = this.workDone; - } - if (task.cost > 0) { - progressMonitor.BeginTask(task.name, totalWork, false); - progressMonitor.WorkDone = workDone; + while (true) { + CancellationToken token; + JobTask task; + int totalWork, workDone; + lock (lockObj) { + if (actions.Count == 0) { + this.threadIsRunning = false; + progressMonitor.Done(); + return; } - try { - task.Run(token); - lock (lockObj) { - this.workDone += task.cost; - } - } catch (OperationCanceledException) { - // ignore cancellation + task = this.actions.Dequeue(); + token = this.cancellationSource.Token; + totalWork = this.totalWork; + workDone = this.workDone; + } + if (task.cost > 0) { + progressMonitor.BeginTask(task.name, totalWork, false); + progressMonitor.WorkDone = workDone; + } + try { + task.Run(token); + lock (lockObj) { + this.workDone += task.cost; } + } catch (OperationCanceledException) { + // ignore cancellation + } catch (Exception ex) { + MessageService.ShowError(ex, "Error on LoadSolutionProjects thread"); } - } catch (Exception ex) { - MessageService.ShowError(ex, "Error on LoadSolutionProjects thread"); } } diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs index 5d6a825aaf..6ceeb5c6bf 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs @@ -404,7 +404,11 @@ namespace ICSharpCode.SharpDevelop ICompilationUnit resultUnit = null; for (int i = 0; i < newUnits.Length; i++) { IProjectContent pc = projectContents[i]; - newUnits[i] = parser.Parse(pc, fileName, fileContent); + try { + newUnits[i] = parser.Parse(pc, fileName, fileContent); + } catch (Exception ex) { + throw new ApplicationException("Error parsing " + fileName, ex); + } if (i == 0 || pc == parentProjectContent) resultUnit = newUnits[i]; }