From ff2a4f26f0ae592c4451bf9edcb2af823504b36b Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Tue, 2 Jan 2007 20:51:51 +0000 Subject: [PATCH] Fixed forum-14286: exceptions thrown when trying to create WPF application without .NET Framework 3.0 installed. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2259 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../project/CSharp/WPFApplication.xpt | 2 +- .../CSharp/WPFNavigationApplication.xpt | 2 +- .../Templates/Project/ProjectDescriptor.cs | 19 ++++++++++++++++--- .../Templates/Project/ProjectTemplate.cs | 6 +++++- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/data/templates/project/CSharp/WPFApplication.xpt b/data/templates/project/CSharp/WPFApplication.xpt index 4d959541fd..1e2bc4b7c7 100644 --- a/data/templates/project/CSharp/WPFApplication.xpt +++ b/data/templates/project/CSharp/WPFApplication.xpt @@ -37,7 +37,7 @@ WinExe - + diff --git a/data/templates/project/CSharp/WPFNavigationApplication.xpt b/data/templates/project/CSharp/WPFNavigationApplication.xpt index f5a42262ed..3caf6e08d5 100644 --- a/data/templates/project/CSharp/WPFNavigationApplication.xpt +++ b/data/templates/project/CSharp/WPFNavigationApplication.xpt @@ -37,7 +37,7 @@ WinExe - + diff --git a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs index e526dea318..2fc129baf5 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs @@ -52,6 +52,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates bool clearExistingImports; List projectImports = new List(); + string importsFailureMessage; List files = new List(); List projectItems = new List(); @@ -188,6 +189,9 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates if (string.Equals(importsElement.GetAttribute("clear"), "true", StringComparison.OrdinalIgnoreCase)) { clearExistingImports = true; } + if (importsElement.HasAttribute("failureMessage")) { + importsFailureMessage = importsElement.GetAttribute("failureMessage"); + } foreach (XmlElement importElement in ChildElements(importsElement)) { TemplateLoadException.AssertAttributeExists(importElement, "Project"); projectImports.Add(new Import( @@ -292,10 +296,19 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates if (clearExistingImports) { MSBuildInternals.ClearImports(((MSBuildBasedProject)project).MSBuildProject); } - foreach (Import projectImport in projectImports) { - ((MSBuildBasedProject)project).MSBuildProject.AddNewImport(projectImport.Key, projectImport.Value); + try { + foreach (Import projectImport in projectImports) { + ((MSBuildBasedProject)project).MSBuildProject.AddNewImport(projectImport.Key, projectImport.Value); + } + ((MSBuildBasedProject)project).CreateItemsListFromMSBuild(); + } catch (MSBuild.InvalidProjectFileException ex) { + if (string.IsNullOrEmpty(importsFailureMessage)) { + MessageService.ShowError("Error creating project:\n" + ex.Message); + } else { + MessageService.ShowError(importsFailureMessage + "\n\n" + ex.Message); + } + return null; } - ((MSBuildBasedProject)project).CreateItemsListFromMSBuild(); } if (projectProperties.Count > 0) { 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 78cc6a30a4..d30b3667bb 100644 --- a/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs +++ b/src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs @@ -282,7 +282,11 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates return combineDescriptor.CreateSolution(projectCreateInformation, this.languagename); } else if (projectDescriptor != null) { projectCreateInformation.Solution = new Solution(); - return projectDescriptor.CreateProject(projectCreateInformation, this.languagename).FileName; + IProject project = projectDescriptor.CreateProject(projectCreateInformation, this.languagename); + if (project != null) + return project.FileName; + else + return null; } else { return null; }