Я пишу расширение для VS2010, и мой пакет реализует IVsSelectionEvents
для отслеживания выбора в обозревателе решений:
public int OnSelectionChanged(
IVsHierarchy pHierOld,
uint itemidOld,
IVsMultiItemSelect pMISOld,
ISelectionContainer pSCOld,
IVsHierarchy pHierNew,
uint itemidNew,
IVsMultiItemSelect pMISNew,
ISelectionContainer pSCNew)
{
if (pSCNew != null)
{
uint count;
pSCNew.CountObjects((uint) Constants.GETOBJS_SELECTED, out count);
object[] selectedObjects = new object[count];
pSCNew.GetObjects((uint) Constants.GETOBJS_SELECTED, count, selectedObjects);
// What is the type of this object?
var selectedItem = selectedObjects[0] as ???;
}
return VSConstants.S_OK;
}
GetObjects
заполняет массив объектов, но Я не знаю, каков фактический тип этих объектов .GetType
возвращает System.__ComObject
, что не очень полезно.Я предполагаю, что эти объекты реализуют известный интерфейс, но как узнать, какой?Кажется, это нигде не задокументировано ... В настоящее время я использую dynamic
для доступа к свойствам объекта, но это не идеально, и в любом случае я не знаю, какие методы предоставляются этим объектом (я могусм. только свойства в окне просмотра)
Кто-нибудь знает , какой интерфейс реализован элементами проекта в обозревателе решений ?