内置C#/VB.Net编辑器带有智能感知功能 - Roslyn、VSTA还是其他什么?

8
我需要在我的应用程序中提供脚本功能,使客户能够使用我们的对象模型扩展其功能。我希望提供一种集成的C#/VB.Net编辑器,具有智能感知功能,但在查看了像AvalonEdit和ScintillaNet这样的产品之后,它们似乎并没有提供真正的代码补全,只是提供了一个 API,您可以在弹出式自动完成列表中提供自己的项目列表。
因此,我想知道Roslyn是否提供了任何此类功能?从我找到的教程和示例来看,Roslyn实际上只是一个编译器服务。
作为最后的选择,客户可以使用类似VS Express的东西,但集成的编辑器显然更好一些。
(我还发现了Visual Studio Tools for Applications,听起来很有前途;但在线资源已经几年没有更新了,并且没有文档/教程,所以我无法得到任何信息)。

你可能会发现这个问题很有用:https://dev59.com/eHNA5IYBdhLWcg3wfd8m - Erik Funkenbusch
3个回答

3

虽然我不是这方面的专家,但由于您没有收到其他回复,我会尝试回答。

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

从AvalonEdit和SharpDevelop的代码来看,代码补全似乎是其中最困难的部分之一。基本上,您必须编写编译器(或解析器)以确定应在完成列表中列出哪些项目。看起来Roslyn提供了构建完成列表的工具。在早期版本中,这些工具与VS编辑器绑定在一起,但我看到有说法说它们在最新版本中是独立的。如果是这样,这些工具将非常有用,可以实现代码补全。

我还没有真正深入研究过细节,但我打算这么做,因为我有一些与您相同的目标,并且Roslyn看起来会很有用(根据我目前所知道的,还不是很多)。


2
您提出了一个非常有趣的观点:“经过查看像AvalonEdit,SharpDevelop和ScintillaNet这样的产品后,它们似乎没有提供真正的代码完成智能提示”。SharpDevelop是一个完整的IDE,为什么您认为它没有“真正”的代码完成智能提示?您需要提供一些证据,否则这个说法就是无效的。
要实现您想要的功能,只能通过两个重要的组件来实现:
- 语言解析器,可以获得代码完成的上下文和元素。这就是Roslyn所提供的功能,但Roslyn还不够成熟,无法解析所有现有的C#语法。SharpDevelop(以及MonoDevelop)使用NRefactory,它具有相同的目标。 - 支持语法高亮的UI元素。这可以通过基于您选择的UI框架的AvalonEdit或ScintillaNet来实现。
Visual Studio Shell可能会为您提供一些帮助,正如@Mystere Man指出的那样。但我个人对此并不了解。

我也是这么想的 - 我不知道SharpDevelop中代码完成方面有任何缺陷。 - bubba
这可能会有用:http://social.msdn.microsoft.com/Forums/en-US/roslyn/thread/78e6f820-8f9f-4da9-8a47-d46f846b0a11 - bubba
感谢回应并表示歉意 - 我错误地提到了SharpDevelop,现在已将其删除。 - Andrew Stephens

0

我曾经努力尝试使用内置组件之一,但最终决定自己实现一个。在一天的探索RichTextBox api之后,你可以轻松地构建这种类型的支持。只需玩一下PreviewKeyDown/Up,并确保一批工作与撤消支持等相配合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接