Я следил за руководством MSDN Hello World по разработке расширений Visual Studio (в этой статье конкретно рассматривается его создание в виде команды панели инструментов Visual Studio).
Я пытаюсь перечислить все проекты, содержащиеся в текущем/активном решении.
В автоматически сгенерированном коде для шаблона Command.
Я попробовал свойство Projects
EnvDTE
Solution
, но оно не показывает никаких проектов.
Также есть свойство ActiveSolutionProjects
, но оно также показывает пустой массив.
Как это достигается?
P.S.: Я попробовал интерфейсы DTE и DTE2, так как из документации непонятно, какую версию использовать. Я получаю нулевую услугу для DTE2, поэтому я использую DTE.
Мой обозреватель решений выглядит так:
Обновление: Берт Хейбен из gitter/extendvs предложил следующее, найденное на примеры расширения VSSDK > - но это тоже не работает (возвращает 0 элементов как внутри конструктора, так и внутри функции обратного вызова):
private Hashtable GetLoadedControllableProjectsEnum()
{
Hashtable mapHierarchies = new Hashtable();
IVsSolution sol = (IVsSolution)this.ServiceProvider.GetService(typeof(SVsSolution));
Guid rguidEnumOnlyThisType = new Guid();
IEnumHierarchies ppenum = null;
ErrorHandler.ThrowOnFailure(sol.GetProjectEnum((uint)__VSENUMPROJFLAGS.EPF_LOADEDINSOLUTION, ref rguidEnumOnlyThisType, out ppenum));
IVsHierarchy[] rgelt = new IVsHierarchy[1];
uint pceltFetched = 0;
while (ppenum.Next(1, rgelt, out pceltFetched) == VSConstants.S_OK &&
pceltFetched == 1)
{
IVsSccProject2 sccProject2 = rgelt[0] as IVsSccProject2;
if (sccProject2 != null)
{
mapHierarchies[rgelt[0]] = true;
}
}
return mapHierarchies;
}
System.__ComObject
, который содержит свойствоSolution
, которое, в свою очередь, содержит свойствоProjects
. Я попробовал SDTE, как вы предложили, но SDTE - это пустой интерфейс, так что это мало помогает. - person Veverke   schedule 25.08.2016