如何从CodeFunction获取函数的定义?

时间:2016-09-22 07:16:34

标签: c# visual-studio-extensions envdte visual-studio-sdk

我有一个来自EnvDTE命名空间的CodeFunction对象。我想得到它的定义; e.g:

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

我想把第一行作为字符串。

到目前为止我一直在尝试,

1)尝试通过获取CodeFunction的Type(返回类型)和参数然后在循环中将它们添加到字符串来创建一个字符串。但是,参数类型的名称变得像“System.UInt32”等,这是我不想要的。这也是一个问题,它可能不会完全ref Guid pguidCmdGroup。我害怕跳过参考。

2)我尝试使用CodeFunction的功能,但我能得到的只是它的简单名称。

3)我试图从CodeFunction的起点和终点写,但是找不到将两个TextPoint转换成字符串的方法,因为我意识到结束点不是定义的结尾而是它自己的函数我不想。

如何才能简单地private void MenuItemCallback(object sender, EventArgs e)MenuItemCallback(object sender, EventArgs e)

感谢您的帮助。

1 个答案:

答案 0 :(得分: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();
}