/// <summary> /// This function is the callback used to execute the command when the menu item is clicked. /// See the constructor to see how the menu item is associated with this function using /// OleMenuCommandService service and MenuCommand class. /// </summary> /// <param name="sender">Event sender.</param> /// <param name="e">Event args.</param> private void MenuItemCallback(object sender, EventArgs e) { IVsSolution solution = _package.GetService <IVsSolution, SVsSolution>(); // As the "Edit Links" command is added on the Project menu even when no solution is opened, it must // be validated that a solution exists (in case it doesn't, GetSolutionInfo() returns 3 nulled strings). ErrorHandler.ThrowOnFailure(solution.GetSolutionInfo(out string s1, out string s2, out string s3)); if (s1 != null && s2 != null && s3 != null) { try { IVsUIShell uiShell = (IVsUIShell)ServiceProvider.GetService(typeof(SVsUIShell)); ErrorHandler.ThrowOnFailure(uiShell.GetDialogOwnerHwnd(out IntPtr parentHwnd)); IProjectLinkTracker linker = _package.GetService <IProjectLinkTracker, ISProjectLinkTracker>(); if (linker == null) { throw new NullReferenceException(); } LinksEditorView linksEditor = new LinksEditorView(linker, ServiceProvider); linksEditor.ShowDialog(new WindowHandleAdapter(parentHwnd)); } catch (Exception ex) { _package.ShowInformationalMessageBox(Resources.ProjectLinkerCaption, ex.Message, true); } } }
/// <summary> /// This function is the callback used to execute the command when the menu item is clicked. /// See the constructor to see how the menu item is associated with this function using /// OleMenuCommandService service and MenuCommand class. /// </summary> /// <param name="sender">Event sender.</param> /// <param name="e">Event args.</param> private void MenuItemCallback(object sender, EventArgs e) { IVsSolution solution = _package.GetService <IVsSolution, SVsSolution>(); // As the "Edit Links" command is added on the Project menu even when no solution is opened, it must // be validated that a solution exists (in case it doesn't, GetSolutionInfo() returns 3 nulled strings). ErrorHandler.ThrowOnFailure(solution.GetSolutionInfo(out string s1, out string s2, out string s3)); if (s1 != null && s2 != null && s3 != null) { IVsUIShell uiShell = _package.GetService <IVsUIShell, SVsUIShell>(); ErrorHandler.ThrowOnFailure(uiShell.GetDialogOwnerHwnd(out IntPtr parentHwnd)); HierarchyNodeFactory hierarchyNodeFactory = new HierarchyNodeFactory(ServiceProvider); IHierarchyNode targetProject = hierarchyNodeFactory.GetSelectedProject(); SolutionPickerView solutionPicker = new SolutionPickerView(ServiceProvider, targetProject); DialogResult result = solutionPicker.ShowDialog(new WindowHandleAdapter(parentHwnd)); if (result == DialogResult.OK) { try { IHierarchyNode sourceProject = solutionPicker.SelectedNode; IProjectLinkTracker linker = _package.GetService <IProjectLinkTracker, ISProjectLinkTracker>(); // todo linker.AddProjectLink(sourceProject.ProjectGuid, targetProject.ProjectGuid); if (solutionPicker.CopyProjectItemsByDefault) { linker.LinkAllProjectItems(sourceProject.ProjectGuid, targetProject.ProjectGuid); } _package.ShowInformationalMessageBox( Resources.ProjectLinkerCaption, Resources.ProjectsSuccessfullyLinked, false); } catch (ProjectLinkerException ex) { _package.ShowInformationalMessageBox(Resources.ProjectLinkerCaption, ex.Message, true); } } } }