Получите список Файлов Решения/Проекта для Дополнения VS или Плагина DXCore

при попытке ИЗБРАННОГО КОЛИЧЕСТВА (1) ОТ group_relations это будет немного быстрее, потому что это не попытается получить информацию из столбцов.

КОЛИЧЕСТВО (1) раньше было быстрее, чем КОЛИЧЕСТВО (*), но это больше не верно, начиная с современного DBMS достаточно умны, чтобы знать, что Вы не хотите знать о столбцах

13
задан Dusda 16 September 2009 в 18:33
поделиться

2 ответа

Все это легко доступно с помощью DTE в Visual Studio SDK.

Вы можете получить список проектов в решении, используя интерфейс Projects .

Вы можете получить список элементов в проекте, используя ProjectItem ].

Для получения дополнительной информации я бы рекомендовал прочитать на Controlling Projects and Solutions .

4
ответ дан 1 December 2019 в 22:07
поделиться

Спасибо, Рид; статья, на которую вы указали ссылку, позволила мне получить доказательство концепции за пару минут.

Поскольку я чувствую, что это связано, вот итерация и рекурсивные средства, с помощью которых я собрал ProjectItems. Я сделал это в DXCore, но та же идея применима к необработанному Visual Studio SDK (DXCore - это просто более красивая оболочка над SDK). Объекты «Решение», «Проекты», «Проект» и «ProjectItem» находятся прямо здесь, в EnvDTE.

Настройка проектов

EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution;
EnvDTE.Projects projects = solution.Projects;

Итерация по проектам для извлечения элементов проекта

var projects = myProjects.GetEnumerator();
while (projects.MoveNext())
{
    var items = ((Project)projects.Current).ProjectItems.GetEnumerator();
    while (items.MoveNext())
    {
        var item = (ProjectItem)items.Current;
        //Recursion to get all ProjectItems
        projectItems.Add(GetFiles(item));
    }
}

Наконец, рекурсия, которую я делаю для получения все элементы проекта в активном решении

ProjectItem GetFiles(ProjectItem item)
{
    //base case
    if (item.ProjectItems == null)
        return item;

    var items = item.ProjectItems.GetEnumerator();
    while (items.MoveNext())
    {
        var currentItem = (ProjectItem)items.Current;
        projectItems.Add(GetFiles(currentItem));
    }

    return item;
}
18
ответ дан 1 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: