2016-09-22 6 views
1

У меня есть объект CodeFunction из пространства имен EnvDTE. Я хочу получить его определение; например:Как я могу получить определение функции из CodeFunction?

private void MenuItemCallback(object sender, EventArgs e) 
{ 
    MessageBox.Show("Try"); 
} 

Я хотел бы получить первую строчку как строку.

То, что я не пытался до сих пор,

1) Попробуйте сделать строку, получая Тип CodeFunction (востановление типа) и параметров, то в цикле добавить их в строку. Однако имена типов параметров становятся похожими на «System.UInt32» и т. Д., Которых я не хочу. Также проблема с этим, она может не принимать ref Guid pguidCmdGroup как полностью. Я боюсь пропустить ref.

2) Я попытался использовать функции CodeFunction, но все, что я мог получить, это простое имя.

3) Я попытался написать начальную точку и конечную точку CodeFunction, но не смог найти способ превратить два текстовых поля в строку, и, как я понял, конечная точка не является окончанием определения, но функция it self которого я не хочу.

Как я могу получить просто private void MenuItemCallback(object sender, EventArgs e) или MenuItemCallback(object sender, EventArgs e)?

Благодарим за помощь.

+0

Я не удивлюсь, если это невозможно. Во время компиляции код 'string' переводится на машинный язык. –

+0

Может быть, но есть некоторые расширения, которые могут редактировать/искать/и т. Д. на редакторе или на активном документе, поэтому нет способа получить определение метода? – mtilhan

ответ

0

Вы должны использовать GetStartPoint() и GetEndPoint():
Читать полный источник функции, а затем отрезать код перед первой открытой фигурной скобкой.

// Retrieve the source code for the function. 
TextPoint start = codeFunction.GetStartPoint(vsCMPart.vsCMPartHeader); 
TextPoint finish = codeFunction.GetEndPoint(); 

string fullSource = start.CreateEditPoint().GetText(finish); 

// Find the first open curly brace 
int openCurlyBracePos = fullSource.IndexOf('{'); 

string declaration = String.Empty; 
if (openCurlyBracePos > -1) { 
    declaration = fullSource.Substring(0, openCurlyBracePos).Trim(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^