带有intellisense的内置C#/ VB.Net编辑器 – Roslyn,VSTA还是其他什么?

我需要在我的应用程序中提供脚本function,允许客户使用我们的对象模型扩展其function。 我希望提供一些带有intellisense的集成C#/ VB.Net编辑器,但在查看AvalonEdit和ScintillaNet等产品之后,它们似乎没有提供真正的代码完成,只是一个API,您可以在其中提供自己的列表弹出自动完成列表中显示的项目。

因此,我想知道罗斯琳是否提供了这样的function? 从我遇到的教程和示例中可以看出,Roslyn实际上只是一个编译器服务。

作为最后的手段,客户可以使用像VS Express这样的东西,但集成的编辑器显然更好一些。

(我也遇到了Visual Studio Tools for Applications,听起来很有希望;但是在线资源已有几年历史了,文档/教程也不存在,所以我用这个来填空。)

我不是这个领域的专家。 但既然你还没有收到任何其他回复,我会小心翼翼。

我认为简短的回答是“是”。

查看AvalonEdit和SharpDevelop中的代码,看起来代码完成是最困难的部分之一。 本质上,您必须编写一个编译器(或者解析器,无论如何)来确定完成列表中应该包含哪些项。 Roslyn似乎提供了构建完成列表的工具。 在旧版本中,这些工具与VS编辑器绑定,但我已经看到声明它们在最新版本中是独立的。 如果是这样,这些工具在实现代码完成方面非常有用。

我根本没有真正研究细节,但我打算,因为我和你有一些相同的目标,而Roslyn看起来会有所帮助(基于我目前所知,这不是很多)。

您提出了一个非常有趣的说法,“在查看AvalonEdit,SharpDevelop和ScintillaNet等产品后,它们似乎无法提供真正的代码完成智能感知”。 SharpDevelop是一个完整的IDE,为什么你找不到“真正的”代码完成Intellisense? 您必须提供一些证据,或该声明无效。

您想要实现的目标只能通过两个重要组件来实现,

  • 语言解析器,您可以使用它来获取代码完成的上下文和元素。 这就是Roslyn提供的,但Roslyn还不够成熟,无法解析所有现有的C#语法。 SharpDevelop(以及MonoDevelop)使用NRefactory ,它实现了同样的目标。

  • 支持语法突出显示的UI元素。 这可以通过AvalonEdit或基于您选择的UI框架的ScintillaNet来实现。

正如@Mystere Man所指出的,Visual Studio Shell可能会为您提供一些帮助。 但我个人对此并不了解。

我真的很难使用其中一个内置组件,但最终自己实现了一个。 在探索了RichTextBox api一天后,您可以轻松地构建此支持。 只需使用PreviewKeyDown / Up,确保使用撤消支持等一系列工作。