如何在Visual Studio中以编程方式执行"转到定义"?

Ome*_*viv 6 c# vsx envdte visual-studio-macros

给定一个表示特定类/字段/属性的字符串(例如MyNameSpace.MyClass或者System.String.Length),我如何以编程方式使Visual Studio转到该类/字段/属性(即,使Visual Studio做同样的事情,如果我去在代码编辑器中输入引用然后点击F12)?

Sam*_*ell 7

您可能需要执行以下操作.

  1. 获取全局IVsObjectManager2接口(由SVsObjectManager对象实现)
  2. 调用IVsObjectManager2.FindLibrary获取C#库,并将结果转换为IVsSimpleLibrary2.
  3. IVsSimpleLibrary2.GetList2使用正确的调用,VSOBSEARCHCRITERIA2以便在解决方案的项目中找到符号.

    1. 如果结果IVsSimpleObjectList2有,并且带有返回,则使用该方法跳转到源.GetItemCount()==1CanGoToSourceVSOBJGOTOSRCTYPE.GS_DEFINITIONpfOK==trueGoToSource

    2. 否则,只需向用户显示可能的选项,而不是跳转到源.您将能够使用IVsFindSymbol接口(由SVsObjectSearch对象实现)来实现此目的.

  • @JoanComasFdz我把这个实现在你的Gist中:https://gist.github.com/OmerRaviv/fc3ce6fbd5b6af501f01请注意,这个代码在VS2015中不能很好地工作,因为新的Roslyn语言服务不是100%倒退兼容.在VS2015中,更加可靠和高效的方法是找到要转到的东西的ISymbol,然后使用ISymbol.Locations属性找出它的源位置. (3认同)