diff --git a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs index 394a3b92c9..7d0a5aebd8 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs @@ -798,7 +798,19 @@ namespace ICSharpCode.SharpDevelop.Project InitializeMSBuildProject(); - project.Load(fileName); + try { + project.Load(fileName); + } catch (MSBuild.InvalidProjectFileException ex) { + LoggingService.Warn(ex); + if (ex.ErrorCode == "MSB4075") { + // "The project file must be opened in VS IDE and converted to latest version + // before it can be build by MSBuild." + Converter.PrjxToSolutionProject.ConvertVSNetProject(fileName); + project.Load(fileName); + } else { + throw; + } + } this.ActiveConfiguration = GetEvaluatedProperty("Configuration") ?? this.ActiveConfiguration; this.ActivePlatform = GetEvaluatedProperty("Platform") ?? this.ActivePlatform; diff --git a/src/Main/Base/Project/Src/Project/UnknownProject.cs b/src/Main/Base/Project/Src/Project/UnknownProject.cs index 98979e0d9e..4686b9a514 100644 --- a/src/Main/Base/Project/Src/Project/UnknownProject.cs +++ b/src/Main/Base/Project/Src/Project/UnknownProject.cs @@ -6,22 +6,38 @@ // using System; +using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Project { public class UnknownProject : AbstractProject { string warningText = "${res:ICSharpCode.SharpDevelop.Commands.ProjectBrowser.NoBackendForProjectType}"; + bool warningDisplayedToUser; public string WarningText { get { return warningText; } set { warningText = value; } } - public UnknownProject(string fileName, string title, string warningText) + public bool WarningDisplayedToUser { + get { return warningDisplayedToUser; } + set { warningDisplayedToUser = value; } + } + + public void ShowWarningMessageBox() + { + warningDisplayedToUser = true; + MessageService.ShowError("Error loading " + this.FileName + ":\n" + warningText); + } + + public UnknownProject(string fileName, string title, string warningText, bool displayWarningToUser) : this(fileName, title) { this.warningText = warningText; + if (displayWarningToUser) { + ShowWarningMessageBox(); + } } public UnknownProject(string fileName, string title) diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs index 1104481b77..44279038ee 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs @@ -117,16 +117,13 @@ namespace ICSharpCode.SharpDevelop try { newProject = binding.LoadProject(provider, location, title); } catch (XmlException ex) { - MessageService.ShowError("Error loading " + location + ":\n" + ex.Message); - newProject = new UnknownProject(location, title, ex.Message); + newProject = new UnknownProject(location, title, ex.Message, true); newProject.TypeGuid = projectTypeGuid; } catch (Microsoft.Build.BuildEngine.InvalidProjectFileException ex) { - MessageService.ShowError("Error loading " + location + ":\n" + ex.Message); - newProject = new UnknownProject(location, title, ex.Message); + newProject = new UnknownProject(location, title, ex.Message, true); newProject.TypeGuid = projectTypeGuid; } catch (UnauthorizedAccessException ex) { - MessageService.ShowError("Error loading " + location + ":\n" + ex.Message); - newProject = new UnknownProject(location, title, ex.Message); + newProject = new UnknownProject(location, title, ex.Message, true); newProject.TypeGuid = projectTypeGuid; } } else { diff --git a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs index b3b61115fc..542fb390b1 100644 --- a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs +++ b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs @@ -349,6 +349,12 @@ namespace ICSharpCode.SharpDevelop.Project IProject project; if (binding != null) { project = LanguageBindingService.LoadProject(solution, fileName, solution.Name); + if (project is UnknownProject) { + if (((UnknownProject)project).WarningDisplayedToUser == false) { + ((UnknownProject)project).ShowWarningMessageBox(); + } + return; + } } else { MessageService.ShowError(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.InvalidProjectOrCombine}", new string[,] {{"FileName", fileName}})); return;