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; }