Я пишу расширение Visual Studio и хочу перебрать все файлы в текущем решении (чтобы найти файлы с одинаковыми именами, игнорируя расширения). Посмотрев вокруг, я обнаружил, что могу перебрать все проекты в решении и оттуда рекурсивно по всем элементам Project и их дочерним элементам.
В небольшом примере решения на C # это работает хорошо, но если я попробую это на большем решении C ++ с работы, это не так. В этом решении все проекты сортируются в папках решений. Solution.Projects содержит указанные папки, а свойство ProjectItems каждой папки содержит проекты (файлы vcxproj). НО все эти ProjectItems свойства проекта являются нулевыми. Не пусто, ноль. Таким образом, рекурсия заканчивается довольно быстро и не видит ни одного фактического документа.
Какого черта? Что я могу сделать по этому поводу? Как я могу получить документы здесь?
Я уже посмотрел на эти два. Принятые ответы есть то, что у меня уже есть: /
Перечислить все файлы в текущем проекте Visual Studio
Получить список файлов решений / проектов для VSПлагин или плагин DXCore
Мой код, запускающий рекурсию
DTE2 dte2 = Package.GetGlobalService(typeof(DTE)) as DTE2;
foreach (Project project in dte2.Solution.Projects)
{
OpenAll(project.ProjectItems);
}
рекурсивная функция
protected void OpenAll(ProjectItems _aItems)
{
Dispatcher.VerifyAccess();
foreach (ProjectItem item in _aItems)
{
if (item.Name != null)
{
string name = item.Name.Contains(".") ? item.Name.Substring(0, item.Name.IndexOf('.')) : item.Name;
if (string.Compare(StrName, name, true) == 0 && !item.IsOpen)
{
// if it's an item with the right name open it
item.Open();
}
}
if (item.ProjectItems != null && item.ProjectItems.Count > 0)
{
// Process sub items
// I NEVER GET HERE BECAUSE ProjectItems IS NULL!
OpenAll(item.ProjectItems);
}
}
}