Пакет расширяемости Visual Studio не смотрит на правильный проект

Я создал новый пакет расширяемости VS 2010. Пока что все, что я хочу сделать, - это чтобы пользователь нажал кнопку и заполнил список со всем содержимым решения. У меня есть следующий код:

EnvDTE80.DTE2 dte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.
    GetActiveObject("VisualStudio.DTE.10.0");

foreach (Project project in dte.Solution.Projects)
{
    foreach(ProjectItem pi in project.ProjectItems)
    {
         listView1.Items.Add(pi.Name.ToString());
    }
}

Это, кажется, работает, однако, он заполняет список содержимым решения с пакетом в нем, а не экспериментальным экземпляром, который запускается при запуске. Я неправильно создаю ссылку?

2 ответа

Решение

Метод GetActiveObject возвращает первый экземпляр процесса DTE, а не вызывающий DTE. (в проекте Visual Studio SDK 2010 в Visual Studio 2010 тип F5 для выполнения экспериментального куста может завершиться ошибкой)

Посмотрите здесь и здесь для более подробной информации...

Нет - нужно использовать ProjectItem.SubProject чтобы получить то, что вы хотите... в зависимости от структуры решения может потребоваться некоторая рекурсия... для некоторого примера кода, делающего все это хорошо, см. http://www.wwwlicious.com/2011/03/envdte-getting-all-projects.html

Другие вопросы по тегам