Как получить выбранный объект в обозревателе решений в расширении VS 2015?
Мне интересно получить проект или ProjectItem (в качестве примеров, не ограничиваясь этими двумя) для текущего выбора, где выбран только один элемент.
Большинство людей, кажется, используют IVsMonitorSelection
, чтобы получить IVSHierarchy
, а затем используют следующее, Чтобы получить объект для выбранного элемента (в случае выбора одного элемента):
var monitorSelection = (IVsMonitorSelection) Package.GetGlobalService(typeof(IVsMonitorSelection));
IntPtr hierarchyPointer, selectionContainerPointer;
uint projectItemId;
IVsMultiItemSelect multiItemSelect;
monitorSelection.GetCurrentSelection(out hierarchyPointer, out projectItemId, out multiItemSelect, out selectionContainerPointer);
var hierarchy = (IVsHierarchy) Marshal.GetObjectForIUnknown(hierarchyPointer);
Marshal.Release(hierarchyPointer);
Marshal.Release(selectionContainerPointer);
object o;
hierarchy.GetProperty((uint) projectItemId, (int) __VSHPROPID.VSHPROPID_ExtObject, out o);
Однако, GetProperty
возвращает E_NOTIMPL здесь. Я использую неправильные параметры? Может быть, есть альтернативное решение?
2 ответа:
Вы можете использовать dte.Инструментальные окна.SolutionExplorer.SelectedItems Вот так:
EnvDTE.ProjectItem projectItem = GetSelectedSolutionExplorerItem().Object as EnvDTE.ProjectItem; private EnvDTE.UIHierarchyItem GetSelectedSolutionExplorerItem() { EnvDTE.UIHierarchy solutionExplorer = dte.ToolWindows.SolutionExplorer; object[] items = solutionExplorer.SelectedItems as object[]; if (items.Length != 1) return null; return items[0] as EnvDTE.UIHierarchyItem; }