2017-07-18 101 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++文件的方法 –

相關問題