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

给定一个表示特定类/字段/属性的字符串(例如MyNameSpace.MyClassSystem.String.Length ),如何以编程方式使Visual Studio转到该类/字段/属性(即,使Visual Studio执行相同操作)如果我要在代码编辑器中输入引用然后点击F12,那会发生什么?

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

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

    1. 如果生成的IVsSimpleObjectList2具有GetItemCount() ==1 ,并且带有VSOBJGOTOSRCTYPE.GS_DEFINITION返回pfOK==true ,则使用GoToSource方法跳转到源。

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