Захватите метод, класс, имя сборки, щелкнув правой кнопкой мыши внутри Visual Studio.

Я хотел бы написать расширение Visual Studio, которое фиксирует следующую информацию, когда пользователь щелкает правой кнопкой мыши часть кода.

  1. Определите, щелкнул ли пользователь метод, и если да, то получите имя метода

  2. Получить полное имя класса метода, т.е. (пространство имен + имя класса)

  3. Получить тип вывода содержащего проекта, т. Е. Библиотеку классов и т. Д.

  4. Полное имя сборки, т.е. путь + имя

Я использую комбинацию объекта EnvDTE и метода IVsTextManager GetActiveView(), но не могу получить всю необходимую мне информацию. Я видел, как Test Driven делал это при запуске модульных тестов внутри Visual Studio с помощью щелчка правой кнопкой мыши, поэтому я надеюсь, что смогу добиться того же.

Единственное, что мне удалось извлечь, — это имя метода на сегодняшний день, но для этого требуется, чтобы имя метода было выбрано в среде IDE. EnvDTE хорош для возврата имени проекта, но мне это не очень подходит.

var methodName = (EnvDTE.DTE)this.GetService(typeof(EnvDTE.DTE)).ActiveDocument.Object("").Selection.Text;

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


person user1054637    schedule 08.12.2013    source источник


Ответы (1)


Вы можете получить метод у курсора с помощью CodeElement:

DTE.ActiveWindow.Selection.ActivePoint.CodeElement(vsCMElement.vsCMElementFunction);

См. также раздел Обнаружение кода с помощью модели кода о классе CodeModel.

person Sergey Vlasov    schedule 09.12.2013