2015-09-25 63 views
0

我正在構建一個Visual Studio 2015自定義編輯器(不是代碼編輯器擴展,完全自定義的WPF控件)來編輯.cs文件。我真的不確定在這裏使用.NET編譯SDK的正確方法。使用Roslyn for VS2015自定義編輯器

到目前爲止,我已經試過:

  • 獲取workspace-> soltuion->項目和尋找使用傳遞給我的編輯工廠的文件路徑打開的文件。當然,如果文檔不是解決方案的一部分,您什麼也得不到。
  • 通過從文本緩衝區中提取數據並旋轉我自己的隔離語法樹來解析原始源代碼。

我現在所做的一切都感覺乾淨。是否有更直接的方式來訪問編輯器文檔的編譯器API?

+0

你能詳細說明你想達到的目標嗎?您目前有權訪問VS文本緩衝區,並試圖獲取文檔? – JoshVarty

回答

2

我可能會錯誤地解釋你的問題,但我會幫你解決。這聽起來像你正在嘗試爲給定的文本緩衝區找到Roslyn文檔。

實際上有一整套擴展方法可以更容易地彌合Roslyn和Visual Studio對象之間的差距。

參見:Microsoft.CodeAnalysis.Text.Extensions

他們不與Microsoft.CodeAnalysis NuGet包運不過,你必須通過安裝它們:

Install-Package Microsoft.CodeAnalysis.EditorFeatures.Text -Version 1.0.0

給定一個ITextSnapshotITextBuffer這些方法將使你將它們映射回原來的Roslyn文檔(如果有的話)。

欲瞭解更多信息:https://joshvarty.wordpress.com/2015/07/06/lrn-quick-tip-bridging-visual-studio-and-roslyn/

+0

這聽起來像我需要什麼,我會盡快更新,因爲我有機會嘗試一下。 – Paul

+0

@Paul:不;這不是你需要的。如果您正在製作自定義編輯器,則根本沒有TextBuffer。我假設你擁有的只是一個HierachyItem或ProjectItem。 – SLaks

+0

如果他嘗試過的其中一件事是直接從文本緩衝區解析文本,那聽起來他可以訪問TextBuffer或某種類型的快照。 – JoshVarty

1

您需要需要以使用現有庫存工作區,否則您將不會獲得引用,也不會更重要的是預處理器符號(影響語法樹的形狀)。

請注意VS可以有幾個不同的工作空間,包括當前解決方案的主要VisualStudioWorkspace,其他文件的MiscellaneousFilesWorkspace以及其他一些與調試器相關的工作空間。 (full list

+0

是這種方法,通過搜索工作區文檔解析文件,最好的方法,還是我可以直接以某種方式獲得文檔ID? – Paul

+0

@Paul:你可以試着弄清楚Roslyn在打開普通編輯器時如何進行這種映射。看看http://source.roslyn.io/#Microsoft.VisualStudio.LanguageServices/Implementation/AbstractEditorFactory.cs,雖然我不確定這是否合適。 – SLaks

+0

進一步思考,看看http://source.roslyn.io/#Microsoft.VisualStudio.LanguageServices/Implementation/ProjectSystem/DocumentProvider.cs,79(雖然我不知道這會有多大幫助) – SLaks