给定一个表示特定类/字段/属性的字符串(例如MyNameSpace.MyClass
或System.String.Length
),如何以编程方式使Visual Studio转到该类/字段/属性(即,使Visual Studio执行相同的操作如果我要在代码编辑器中输入参考,然后按F12)?如何在Visual Studio中以编程方式执行“转到定义”?
回答
您可能需要执行以下操作。
- 获取全球
IVsObjectManager2
接口(由SVsObjectManager
对象实现) - 呼叫
IVsObjectManager2.FindLibrary
拿到C#库,并将结果转换到IVsSimpleLibrary2
。 用正确的
VSOBSEARCHCRITERIA2
拨打电话IVsSimpleLibrary2.GetList2
,以便找到解决方案项目中的符号。如果所得
IVsSimpleObjectList2
具有GetItemCount()
==1
,和CanGoToSource
与VSOBJGOTOSRCTYPE.GS_DEFINITION
返回pfOK==true
,使用GoToSource
方法跳转到源。否则,不要跳转到源代码,只需向用户显示可能的选项。您将能够使用
IVsFindSymbol
接口(由SVsObjectSearch
对象实现)来实现此目的。
这很好用,谢谢!在步骤3.1中,如果'GetItemCount()== 1'和'CanGoToSource'返回false,是否有任何方法可以打开该项目上的对象浏览器窗口,作为“GoToSource”的替代方法? –
@OmerRaviv这可能是怎么可能的,通过这些调用的每个参数的数量,而不是一段代码,你可以正确地实现这一点?我需要在VS2013中做同样的事情,我完全失败了。你能提供一些代码吗?谢谢。 – JoanComasFdz
@JoanComasFdz我把我的这个实现放在了Gist中:https://gist.github.com/OmerRaviv/fc3ce6fbd5b6af501f01请注意,这段代码在VS2015中不会很好,因为新的Roslyn语言服务不是100%向后兼容。在VS2015中,更可靠和更高效的方法是找到要去的东西的ISymbol,然后使用ISymbol.Locations属性查找其源位置。 –
- 1. 在Visual Studio 2008中以编程方式执行大写?
- 2. 如何在Visual Studio中以编程方式访问文档?
- 3. 如何以编程方式将行添加到Visual Studio中的rdlc报表中
- 4. Visual Studio宏:如何以编程方式执行“文件 - >全部保存”
- 5. Visual Studio转到执行
- 6. 如何以编程方式执行UINavigationController?
- 7. 如何以编程方式创建并在jME3中执行自定义动画?
- 8. 如何定义(以编程方式)AnimatedStateListDrawable中的转换
- 9. 如何以编程方式构建Visual Studio解决方案?
- 10. Visual Studio问题:如何以编程方式转到特定的文件路径和行号?
- 11. 以编程方式定义XAML模式
- 12. 以编程方式转换visual studio项目版本
- 13. 在liferay中以编程方式执行工作流转换?
- 14. 如何在VSIX项目中以编程方式打开Visual Studio编辑器
- 15. Visual Studio以编程方式附加到托管进程
- 16. 以编程方式定义和执行segue
- 17. 如何以编程方式启用visual studio extension
- 18. 如何以编程方式刷新Visual Studio WPF设计器?
- 19. 如何以编程方式为Visual Studio添加跟踪点?
- 20. 如何以编程方式在android中执行终端命令
- 21. 如何以编程方式在Ember中执行ArrayController [index]?
- 22. 如何在JMX中以编程方式触发“执行GC”
- 23. 转到Visual Studio中的定义 - 接口
- 24. 如何以编程方式将文件添加到C++的Visual Studio项目中?
- 25. 如何将控件(以编程方式)添加到Visual Studio设计器中WinForm
- 26. 如何以编程方式指定segue(不执行segue)?
- 27. 如何在Visual Studio中“转到定义(F12)”外部代码?
- 28. 以编程方式在Visual Studio中打开文件(2010)
- 29. 转到在Visual Studio中覆盖方法定义
- 30. 如何以编程方式在dojo中的SwapView之间执行转换?
F12/GotoDefn是一个标准Devenv命令。每个包的实现都是特定的(C++,C#,VB.NET,F#等等)。模拟这个的唯一方法是1)使用编辑器界面选择一个文本,一个片段,任何东西,并2)运行“Edit.GoToDefinition”命令:http://stackoverflow.com/questions/20168945/how-do- i-use-dte-executecommandedit-gotodefinition-in-a-vs2010-c-macro –
@SimonMourier但是如果没有包含我想要转到的东西的文本的文本编辑器怎么办?有没有办法打开一个不可见的文本视图,该视图仍然绑定到同一个项目上,但是没有对项目系统或其他任何项目产生任何影响,并且也将以调试模式工作? –
在一般情况下,这似乎很难。你是否希望这样做来支持特定的包(C#文件可能?)或所有包?它会是一个插件吗?一个扩展? –