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