2012-10-10 69 views
7

我需要在我的應用程序中提供腳本功能,允許客戶使用我們的對象模型擴展其功能。我希望能夠提供一些集成的C#/ VB.Net編譯器和intellisense,但是在查看像AvalonEdit和ScintillaNet這樣的產品之後,他們似乎沒有提供真正的代碼完成功能,只是一個可以提供自己的列表的API項目出現在彈出的自動完成列表中。內置C#/ VB.Net編輯器與智能感知 - 羅斯林,VSTA,或其他?

因此,我想知道Roslyn是否提供了這些功能?從我遇到的教程和示例中可以看出,Roslyn實際上只是一個編譯器服務。

作爲最後的手段,客戶可以使用類似VS Express的東西,但整合編輯器顯然更好一些。 (我也遇到過Visual Studio Tools for Applications,聽起來很有前途;但是在線資源已經有好幾年了,而且文檔/教程也不存在,所以我在這一部分中留下了一個空白)。

+0

你會發現這個問題非常有用: http://stackoverflow.com/questions/939841/what-is-the-visual-studio-shell-standalone-shell-good-for –

回答

3

我大概不是這方面的專家。但既然你還沒有收到任何其他答覆,我會投注。

我認爲簡短答案是「是」。

看着AvalonEdit和SharpDevelop中的代碼,看起來代碼完成是最困難的部分之一。從本質上講,你必須編寫一個編譯器(或解析器)來確定完成列表中應包含哪些項目。 Roslyn似乎提供了用於構建完成列表的工具。在較早的版本中,這些工具與VS編輯器綁定,但我已經看到聲明說他們在最新版本中是獨立的。如果是這樣,這些工具將對實現代碼完成非常有用。

我還沒有真正地研究過細節,但我打算這麼做,因爲我和你有一些相同的目標,而Roslyn看起來會有幫助的(根據我目前所瞭解的情況,不是很多)。

2

您提出了一個非常有趣的說法,「在查看諸如AvalonEdit,SharpDevelop和ScintillaNet之類的產品之後,他們似乎沒有提供真正的代碼完成智能感知」。 SharpDevelop是一個完整的IDE,爲什麼你找不到「真正的」代碼完成Intellisense?您將不得不提供一些證據,或者該聲明無效。

要實現只能用組件的兩個重要部件來實現什麼,

  • 語言分析器,通過它可以獲取上下文和代碼完成的元素。這就是Roslyn提供的,但是Roslyn還不夠成熟,無法解析所有現有的C#語法。 SharpDevelop(以及MonoDevelop)使用NRefactory,它提供相同的目標。

  • 支持語法高亮顯示的UI元素。這可以通過基於您選擇的UI框架的AvalonEdit或ScintillaNet來實現。

Visual Studio Shell可能會爲您提供一些幫助,正如@Mystere Man指出的那樣。但是我個人對此並不瞭解。

+0

我認爲同樣的事情 - 我沒有意識到SharpDevelop中代碼完成的任何缺陷。 – bubba

+0

這可能是有用的:http://social.msdn.microsoft.com/Forums/en-US/roslyn/thread/78e6f820-8f9f-4da9-8a47-d46f846b0a11 – bubba

+0

感謝您的迴應和道歉 - 我錯誤地提到了SharpDevelop現在已經刪除它。 –

0

我非常努力地使用其中一個內置組件,但最終自己實現了一個。經過一天探索RichTextBox API後,您可以輕鬆地構建此支持。只需使用PreviewKeyDown/Up,確保一批作品使用撤消支持等。