static void LoadProjectInternal(string fileName) { if (!Path.IsPathRooted(fileName)) throw new ArgumentException("Path must be rooted!"); string solutionFile = Path.ChangeExtension(fileName, ".sln"); if (File.Exists(solutionFile)) { LoadSolutionInternal(solutionFile); if (openSolution != null) { bool found = false; foreach (IProject p in openSolution.Projects) { if (FileUtility.IsEqualFileName(fileName, p.FileName)) { found = true; break; } } if (found == false) { string[,] parseArgs = {{"SolutionName", Path.GetFileName(solutionFile)}, {"ProjectName", Path.GetFileName(fileName)}}; int res = MessageService.ShowCustomDialog(MessageService.ProductName, StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.SolutionDoesNotContainProject}", parseArgs), 0, 2, StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.SolutionDoesNotContainProject.AddProjectToSolution}", parseArgs), StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.SolutionDoesNotContainProject.CreateNewSolution}", parseArgs), "${res:Global.IgnoreButtonText}"); if (res == 0) { // Add project to solution Commands.AddExitingProjectToSolution.AddProject((ISolutionFolderNode)ProjectBrowserPad.Instance.SolutionNode, fileName); SaveSolution(); return; } else if (res == 1) { CloseSolution(); try { File.Copy(solutionFile, Path.ChangeExtension(solutionFile, ".old.sln"), true); } catch (IOException){} } else { // ignore, just open the solution return; } } else { // opened solution instead and correctly found the project return; } } else { // some problem during opening, abort return; } } Solution solution = new Solution(); solution.Name = Path.GetFileNameWithoutExtension(fileName); IProjectBinding binding = ProjectBindingService.GetBindingPerProjectFile(fileName); IProject project; if (binding != null) { project = ProjectBindingService.LoadProject(new ProjectLoadInformation(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; } solution.AddFolder(project); ProjectSection configSection = solution.GetSolutionConfigurationsSection(); foreach (string configuration in project.ConfigurationNames) { foreach (string platform in project.PlatformNames) { string key; if (platform == "AnyCPU") { // Fix for SD2-786 key = configuration + "|Any CPU"; } else { key = configuration + "|" + platform; } configSection.Items.Add(new SolutionItem(key, key)); } } solution.FixSolutionConfiguration(new IProject[] { project }); if (FileUtility.ObservedSave((NamedFileOperationDelegate)solution.Save, solutionFile) == FileOperationResult.OK) { // only load when saved succesfully LoadSolution(solutionFile); } }
/// <summary> /// Load a single project as solution. /// </summary> public static void LoadProject(string fileName) { string solutionFile = Path.ChangeExtension(fileName, ".sln"); if (File.Exists(solutionFile)) { LoadSolution(solutionFile); if (openSolution != null) { bool found = false; foreach (IProject p in openSolution.Projects) { if (FileUtility.IsEqualFileName(fileName, p.FileName)) { found = true; break; } } if (found == false) { string[,] parseArgs = { { "SolutionName", Path.GetFileName(solutionFile) }, { "ProjectName", Path.GetFileName(fileName) } }; int res = MessageService.ShowCustomDialog(MessageService.ProductName, StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.SolutionDoesNotContainProject}", parseArgs), 0, 2, StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.SolutionDoesNotContainProject.AddProjectToSolution}", parseArgs), StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.SolutionDoesNotContainProject.CreateNewSolution}", parseArgs), "${res:Global.IgnoreButtonText}"); if (res == 0) { // Add project to solution Commands.AddExitingProjectToSolution.AddProject((ISolutionFolderNode)ProjectBrowserPad.Instance.SolutionNode, fileName); SaveSolution(); return; } else if (res == 1) { CloseSolution(); try { File.Copy(solutionFile, Path.ChangeExtension(solutionFile, ".old.sln"), true); } catch (IOException) {} } else { // ignore, just open the solution return; } } else { // opened solution instead and correctly found the project return; } } else { // some problem during opening, abort return; } } Solution solution = new Solution(); solution.Name = Path.GetFileNameWithoutExtension(fileName); ILanguageBinding binding = LanguageBindingService.GetBindingPerProjectFile(fileName); 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; } solution.AddFolder(project); ProjectSection configSection = solution.GetSolutionConfigurationsSection(); foreach (string configuration in project.ConfigurationNames) { foreach (string platform in project.PlatformNames) { string key; if (platform == "AnyCPU") // Fix for SD2-786 { key = configuration + "|Any CPU"; } else { key = configuration + "|" + platform; } configSection.Items.Add(new SolutionItem(key, key)); } } solution.FixSolutionConfiguration(new IProject[] { project }); if (FileUtility.ObservedSave((NamedFileOperationDelegate)solution.Save, solutionFile) == FileOperationResult.OK) { // only load when saved succesfully LoadSolution(solutionFile); } }