我想编写一个Visual Studio扩展,当用户右键单击代码的一部分时捕获以下信息
检测用户是否点击了某个方法,如果是,请获取方法名称
检索方法的完整类名,即(名称空间+类名)
检索包含项目的输出类型,即类库等
完整的程序集名称,即路径+名称
我正在使用EnvDTE
对象和IVsTextManager GetActiveView()
方法的组合,但我无法获得所需的所有信息。我已经看到Test Driven通过右键单击在Visual Studio中运行单元测试时这样做,所以我希望我能达到同样的目的。
我唯一能够提取的是迄今为止的方法名称,但它需要在IDE中选择方法名称。 EnvDTE
对于返回项目名称很有用,但这对我来说并没有什么好处。
var methodName = (EnvDTE.DTE)this.GetService(typeof(EnvDTE.DTE)).ActiveDocument.Object("").Selection.Text;
在此之后获取类名/命名空间我所拥有的是对所选行的引用,即方法名称。从这里,我在活动窗口中读取所选文件,并从方法名称向后读取,以尝试查找最近出现的class关键字,然后查找名称空间。它非常优雅和笨重。
答案 0 :(得分:0)
您可以使用CodeElement
在光标处获取方法DTE.ActiveWindow.Selection.ActivePoint.CodeElement(vsCMElement.vsCMElementFunction);
另请参阅Discovering Code by Using the Code Model有关CodeModel类的信息。