2017-07-18 16 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オブジェクトの代わりにnullがありますか?私はGoogleにProjectItemを取得せずにファイルのFileCodeModeを取得する方法を試してみました(プロジェクトに\ openという新しいファイルを作成するだけですが、見つからない)。そして、私はIntelliscenseのメソッドのリストをどのように取得するのか尋ねたので、どのファイルでも可能だと思います。たぶんあなたは、プロジェクトに含まれていないファイルの場合、メソッドのリストを取得する方法を知っていますか? :) –

+0

Sergey Aksenovが前述したように、あなたはRoslynを使ってそれを達成することができます。 –

+0

私が前に答えたように、私はC/C++ファイルのメソッドを取得する必要があったので、Roslynは私の問題を解決できません。 –