2017-07-18 59 views
0

我尝试为Visual Studio编写扩展,但找不到有关我的问题的文档。在SDK示例中,仅针对文本高亮等一些内容,但没有任何示例说明如何直接使用Intelliscense。来自MSDN的文档 - 也不是很好。 这是可能的 - 如果我有IWpfTextView,从当前打开的源文件中获取所有方法的列表?在Visual Studio文本编辑器扩展中获取当前源文件方法

+0

见https://stackoverflow.com/questions/23869722/get-semantic-model-from-a-classifier-vsix和https: //vlasovstudio.com/visual-commander/commands.html#CreateTypedVariable –

+0

如果我将使用Rolsyn,我可能会只为C#和VBasic获取方法,对吧? –

+0

是的,Roslyn只支持C#和VB。 –

回答

0

这是可能的 - 从当前打开的源文件中获取所有方法的列表,如果我有IWpfTextView?

您可以通过CodeElement获取所有方法的列表,并检查它是否为CodeFunction对象。以下代码供您参考。

您可以通过DTE.ActiveDocument

获取当前打开源文件
DTE2 dte = this.ServiceProvider.GetService(typeof(DTE)) as DTE2; 
      FileCodeModel fcm = dte.ActiveDocument.ProjectItem.FileCodeModel as FileCodeModel; 
      foreach (CodeElement element in fcm.CodeElements) 
      { 
       if (element is CodeNamespace) 
       { 
        CodeNamespace nsp = element as CodeNamespace; 

        foreach (CodeElement subElement in nsp.Children) 
        { 
         if (subElement is CodeClass) 
         { 
          CodeClass c2 = subElement as CodeClass; 
          foreach (CodeElement item in c2.Children) 
          { 
           if (item is CodeFunction) 
           { 
            CodeFunction cf = item as CodeFunction; 
            MessageBox.Show(cf.Name); 
           } 
          } 
         } 
        } 
       } 
      } 
+0

哦,非常感谢!但正如我所理解的这个方法文件必须在项目中,我们将有空,而不是FileCodeModel对象?我试图谷歌我也可以得到FileCodeMode文件没有得到ProjectItem(只是如果我创建\打开新文件不在项目中),但我没有找到它。并且因为我询问了如何从Intelliscense获取方法列表,因为我认为这对任何文件都是可能的。也许你知道如何获取方法列表,如果文件不在项目中? :) –

+0

作为Sergey Aksenov之前提到的,你可以使用Roslyn来实现它。 –

+0

正如我以前回答,罗斯林不能解决我的问题,因为我需要获取C/C++文件的方法 –

相关问题