Получите информацию о типе от сборок в текущем решении от расширения VS2010 - PullRequest
3 голосов
/ 08 июля 2011

Я строю расширение команды для диаграммы последовательности UML в VS2010, и мне нужен список типов, которые реализуют определенный интерфейс в текущем решении.Как получить доступ к информации о типе и сборке из расширения?До сих пор во всех моих попытках были перечислены сборки, загруженные в исходном проекте расширения, а не те, которые VS редактирует в настоящее время.

1 Ответ

5 голосов
/ 11 июля 2011

Вот решение, к которому я наконец пришел, используя linq для упрощения поиска:

DTE dte = (DTE)ServiceProvider.GetService(typeof(DTE));
var types = from Project project in dte.Solution.Projects
            from Reference reference in (References)project.Object.References
            where reference.Type == prjReferenceType.prjReferenceTypeAssembly
            from t in Assembly.LoadFile(reference.Path).GetTypes()
            where t != typeof(IInterface) && typeof(IInterface).IsAssignableFrom(t)
            select t;

Этот блок просматривает все проекты, содержащиеся в открытом на данный момент решении, получает все их ссылки, загружает те,являются сборками и ищет в них типы, реализующие интерфейс.

...