public static void AddProject(ISolutionFolderNode solutionFolderNode, string fileName) { if (solutionFolderNode == null) { throw new ArgumentNullException("solutionFolderNode"); } ProjectLoadInformation loadInfo = new ProjectLoadInformation(solutionFolderNode.Solution, fileName, Path.GetFileNameWithoutExtension(fileName)); AddProject(solutionFolderNode, ProjectBindingService.LoadProject(loadInfo)); }
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) { var parseArgs = new[] { new StringTagPair("SolutionName", Path.GetFileName(solutionFile)), new StringTagPair("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(new ProjectChangeWatcher(solutionFile)); 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 StringTagPair("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); } }