Пакет расширяемости 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