VS2010 DTE Addin: проект внутри папки решения не является "Проектом" - PullRequest
6 голосов
/ 20 июня 2011

У меня есть небольшой vs addin, который ищет проекты внутри решения и делает с ним несколько вещей.Я собираю проекты следующим образом:

Application.DTE.Solution.Projects.OfType<Project>();

Однако, как только я ввел папку с решениями и поместил в нее проект, внезапно этот проект нигде не был найден.Итак, я попробовал

 private IEnumerable<Project> getProjectsRecursive(IEnumerable<Project> iEnumerable)
 {
      foreach (var item in iEnumerable)
      {
          yield return item;
          foreach (var child in getProjectsRecursive(item.ProjectItems.OfType<Project>()))
          {
              yield return child;
          }
      }
 }
public IEnumerable<Project> EveryProject { get { return getProjectsRecursive(Application.DTE.Solution.Projects.OfType<Project>()); } }

, но проект не существует.Поэтому я проверил вручную, вызов item is Project для проекта

  • непосредственно внутри решения: TRUE
  • папка решения непосредственно внутри решения - TRUE (small wtf)
  • Проект в папке решения (я нашел его в folder.ProjectItems) равен FALSE !!!!!(и, конечно, явное приведение приводит к ошибке)

Какого черта? Не приведя его к Project, я не могу вызвать FullName, Properties() и многие другиевещи на нем, даже если я приведу к dynamic .Пожалуйста, помогите!

1 Ответ

8 голосов
/ 17 августа 2011

Ответ здесь: http://www.wwwlicious.com/2011/03/29/envdte-getting-all-projects-html/

Всего несколько изменений:

if (project.Kind == EnvDTE.Constants.vsProjectKindSolutionItems)
...