繁体   English   中英

从Solution Explorer中选择的项目

[英]Selected project from Solution Explorer

我正在为Visual Studio 2010(vsix)编写自定义包。

我需要做的是在解决方案资源管理器中向项目节点添加上下文菜单按钮。

右键单击Project节点时,我已设法显示上下文菜单,但我的下一个挑战是获取对已单击的Project对象的引用。 目前,我可以使用下面的代码浏览IDE中的活动文档来获取项目。

DTE dte = (DTE)ServiceProvider.GlobalProvider.GetService(typeof(DTE));
Project project = dte.ActiveDocument.ProjectItem.ContainingProject;

所以我的问题是:如何获得对解决方案资源管理器中所选项目的类似引用?

我想到了。 不妨分享信息。

通过使用SVsShellMonitorSelection服务,我可以将所选层次结构的引用作为IVsHierarchy ,这反过来允许我获得对所选对象的引用。 然后,可以根据在解决方案资源管理器中选择的内容将其ProjectItemProjectProjectItem等类。 便利!

IntPtr hierarchyPointer, selectionContainerPointer;
Object selectedObject  = null;
IVsMultiItemSelect multiItemSelect;
uint projectItemId;

IVsMonitorSelection monitorSelection = 
        (IVsMonitorSelection)Package.GetGlobalService(
        typeof(SVsShellMonitorSelection));

monitorSelection.GetCurrentSelection(out hierarchyPointer, 
                                     out projectItemId, 
                                     out multiItemSelect, 
                                     out selectionContainerPointer);

IVsHierarchy selectedHierarchy = Marshal.GetTypedObjectForIUnknown(
                                     hierarchyPointer, 
                                     typeof(IVsHierarchy)) as IVsHierarchy;

if (selectedHierarchy != null)
{
    ErrorHandler.ThrowOnFailure(selectedHierarchy.GetProperty(
                                      projectItemId,
                                      (int)__VSHPROPID.VSHPROPID_ExtObject, 
                                      out selectedObject));
}

Project selectedProject = selectedObject as Project;

这是源头

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM