/// <summary> /// Gets the selected items of a given item container in the VS hierarchy /// </summary> public static IEnumerable <IItemContainer> GetSelection(this IItemContainer itemContainer) { Guard.NotNull(() => itemContainer, itemContainer); var solution = itemContainer.GetSolution(); var dteSolution = solution.As <EnvDTE.Solution>(); var selectedItems = dteSolution.DTE.SelectedItems.Cast <EnvDTE.SelectedItem>(); var allHierarchyItems = itemContainer.Traverse().Concat(new[] { itemContainer }).OfType <HierarchyItem>(); // return allHierarchyItems.Where(item => selectedItems.Any(selected => GetSelectedItemObject(selected) == item.ExtenderObject)); return(selectedItems.Select(selected => allHierarchyItems.FirstOrDefault(item => item.ExtenderObject == GetSelectedItemObject(selected))).Where(e => e != null)); }