From 95cc542675bbfca2ac861576ed6e3397d8da2a7a Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 26 Feb 2012 19:36:01 +0100 Subject: [PATCH] Dispose the ProjectChangeWatcher when creating a new project fails. --- .../CppBinding/CppBinding/Project/CppProject.cs | 1 + src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs | 1 + .../Project/Src/Internal/Templates/Project/ProjectTemplate.cs | 2 ++ src/Main/Base/Project/Src/Project/AbstractProject.cs | 3 ++- src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs | 1 + 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs b/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs index 11260b726a..f54b73bf62 100644 --- a/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs +++ b/src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs @@ -27,6 +27,7 @@ namespace ICSharpCode.CppBinding.Project AddProjectConfigurationsItemGroup(); base.ReevaluateIfNecessary(); // provoke exception if import is invalid } catch (InvalidProjectFileException ex) { + Dispose(); throw new ProjectLoadException("Please ensure that the Windows SDK is installed on your computer.\n\n" + ex.Message, ex); } } diff --git a/src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs b/src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs index 6297a5cf46..1ce02b2cdc 100644 --- a/src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs +++ b/src/AddIns/BackendBindings/FSharpBinding/FSharpProject.cs @@ -27,6 +27,7 @@ namespace FSharpBinding base.AddImport(@"$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets", null); base.ReevaluateIfNecessary(); // provoke exception if import is invalid } catch (InvalidProjectFileException ex) { + Dispose(); throw new ProjectLoadException("Please ensure that the F# compiler is installed on your computer.\n\n" + ex.Message, ex); } } diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs index eb1c53508b..a04a6fbef9 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs @@ -321,6 +321,8 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates } return solutionLocation; } else { + if (createNewSolution) + projectCreateInformation.Solution.Dispose(); return null; } } else { diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index d63a2ae9aa..46eea67028 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -53,7 +53,8 @@ namespace ICSharpCode.SharpDevelop.Project public virtual void Dispose() { WorkbenchSingleton.AssertMainThread(); - watcher.Dispose(); + if (watcher != null) + watcher.Dispose(); isDisposed = true; if (Disposed != null) { Disposed(this, EventArgs.Empty); diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs index b8acbfe405..d53ddbc9ff 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs @@ -1161,6 +1161,7 @@ namespace ICSharpCode.SharpDevelop.Project } catch (InvalidProjectFileException ex) { LoggingService.Warn(ex); LoggingService.Warn("ErrorCode = " + ex.ErrorCode); + Dispose(); throw new ProjectLoadException(ex.Message, ex); } finally { isLoading = false;