From 08308c57292a3d83785af399f874f2813b18953a Mon Sep 17 00:00:00 2001
From: Daniel Grunwald <daniel@danielgrunwald.de>
Date: Fri, 26 Mar 2010 21:05:49 +0000
Subject: [PATCH] Make verbose MSBuild output even more verbose. Fixed
 potential deadlock between IProjectContent.ReferencedContents lock and
 IProject.SyncRoot when switching a project to another target framework.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5644 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
---
 .../Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs  | 1 +
 .../Src/Services/ParserService/ParseProjectContent.cs        | 5 ++++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
index 41a052c885..a5e1f26fa8 100755
--- a/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
+++ b/src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
@@ -223,6 +223,7 @@ namespace ICSharpCode.SharpDevelop.Project
 				this.ReportTargetStartedEvents = true;
 				this.ReportUnknownEvents = true;
 				loggers.Add(new SDConsoleLogger(feedbackSink, LoggerVerbosity.Diagnostic));
+				globalProperties["MSBuildTargetsVerbose"] = "true";
 			}
 			//loggers.Add(new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic));
 			foreach (IMSBuildAdditionalLogger loggerProvider in MSBuildEngine.AdditionalMSBuildLoggers) {
diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs
index 0e656341f3..9ed721623b 100644
--- a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs
+++ b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs
@@ -82,9 +82,12 @@ namespace ICSharpCode.SharpDevelop
 		
 		internal void ReInitialize1(IProgressMonitor progressMonitor)
 		{
+			var mscorlib = AssemblyParserService.GetRegistryForReference(new ReferenceProjectItem(project, "mscorlib")).Mscorlib;
+			// don't fetch mscorlib within lock - finding the correct registry might access the project, causing
+			// a deadlock between IProject.SyncRoot and the ReferencedContents lock
 			lock (ReferencedContents) {
 				ReferencedContents.Clear();
-				AddReferencedContent(AssemblyParserService.GetRegistryForReference(new ReferenceProjectItem(project, "mscorlib")).Mscorlib);
+				AddReferencedContent(mscorlib);
 			}
 			// prevent adding event handler twice
 			ProjectService.ProjectItemAdded   -= OnProjectItemAdded;