我有一个带有自定义“代码图”工具窗口的 VS 扩展。它在树视图控件中显示特定的代码元素。树视图节点支持通过双击树节点导航至符号定义。导航使用与树节点对应的 Roslyn 符号,并导航到它们。
这一切都依赖于 Visual Studio 和 Roslyn 之间的集成。基本上,它尝试从 Roslyn 符号或节点获取位置文件路径和跨度,然后使用文件路径打开文件并通过 VS SDK 实用程序获取
Microsoft.VisualStudio.Text.Editor.IWpfTextView
。然后我使用 IWpfTextView
和位置跨度将插入符移动到所需位置。您可以在 GitHub 上查看详细信息:
https://github.com/Acumatica/Acuminator/blob/dev/src/Acuminator/Acuminator.Vsix/Utils/Navigation/VSDocumentNavigation.cs
这适用于解决方案中声明的符号,但不适用于外部程序集中声明的符号。同时,Visual Studio 本身使用 F12 导航到外部符号。
我想知道是否可以使用 Roslyn 和 VS SDK 以编程方式重复相同的导航。
到目前为止,我只找到以下提示:
正如评论中所讨论的,是的,您可以只调用 VisualStudioWorkspace.TryGoToDefinitionAsync(); Project 参数只是用于帮助我们找出符号的来源——符号仍然可以来自元数据或其他地方。