0

Visual Studio 2010 のエディター拡張機能を作成したいと考えています。私の拡張機能では、現在のキャレット位置にあるクラス、メソッドに関する情報を取得したいと考えています。

たとえば、イベント ハンドラーを使用していて、MessageBox.show(…) を使用して MessageBox を表示するコードがあり、キャレットが .Show にある場合、VS サービスにクエリを実行して、私がキャレットは、System.Windows.Froms.dll バージョン 4.0.40319 などにある MessageBox クラスの Show メソッドにあります。

出来ますか?

4

1 に答える 1

1

There is no way to do this with the current APIs in Visual Studio 2010. これが、私たちがRoslyn API を作成してできるようにする理由です。CTP をインストールすると、標準の言語サービスを Roslyn のサービスに置き換える Roslyn インスタンスがセットアップされます。このインスタンスに直接質問することができます。

Roslyn インスタンスでの実行に依存したくない場合は (そうであると思います)、少しトリッキーになります。パーサーを呼び出して、MessageBox.Show という名前の呼び出しを行っていることを理解できますが、セマンティクスを取得するには、コンパイルを構築して、すべてのプロジェクト参照とソース ファイルを正しく取得するようにします。これははるかにトリッキーな命題であるため、シナリオによっては、可能な限り「ごまかす」ことが必要になる場合があります。

開示: 私は Roslyn チームに所属しています。

于 2012-06-11T16:47:11.700 に答える