給定一個表示特定類/字段/屬性的字符串(例如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#文件可能?)或所有包?它會是一個插件嗎?一個擴展? –