Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I perform "Go To Definition" programmatically in Visual Studio?

Given a string that represents a specific class/field/property (eg MyNameSpace.MyClass or System.String.Length), how can I programmatically cause Visual Studio to go to that class/field/property (ie, make Visual Studio do the same thing that would happen if I was to type in the reference in the code editor and then hit F12)?

like image 948
Omer Raviv Avatar asked Mar 12 '14 07:03

Omer Raviv


1 Answers

You probably need to do the following.

  1. Get the global IVsObjectManager2 interface (implemented by the SVsObjectManager object)
  2. Call IVsObjectManager2.FindLibrary to get the C# library, and cast the result to IVsSimpleLibrary2.
  3. Call IVsSimpleLibrary2.GetList2 with the correct VSOBSEARCHCRITERIA2 in order to locate the symbol within the projects for your solution.

    1. If the resulting IVsSimpleObjectList2 has GetItemCount()==1, and CanGoToSource with VSOBJGOTOSRCTYPE.GS_DEFINITION returns pfOK==true, use the GoToSource method to jump to the source.

    2. Otherwise, rather than jumping to the source, simply display the possible options to the user. You will be able to use the IVsFindSymbol interface (implemented by the SVsObjectSearch object) to for this.

like image 92
Sam Harwell Avatar answered Sep 18 '22 05:09

Sam Harwell