8

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

因此,我想知道 Roslyn 是否提供了任何此类功能?从我遇到的教程和示例来看,Roslyn 似乎实际上只是一个编译器服务。

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

(我还遇到了 Visual Studio Tools for Applications,这听起来很有希望;但是在线资源已有几年的历史,而且文档/教程不存在,所以我对此一无所知)。

4

3 回答 3

3

我当然不是这方面的专家。但是由于您还没有收到任何其他回复,所以我会试一试。

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

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

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

于 2012-10-14T03:45:39.563 回答
2

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

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

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

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

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

于 2012-10-14T08:23:49.363 回答
0

我非常努力地尝试使用其中一个内置组件,但最终自己实现了一个。经过一天的 RichTextBox api 探索后,您可以轻松地构建此支持。只需使用 PreviewKeyDown/Up,确保使用撤消支持等进行一批工作。

于 2012-12-18T01:03:25.773 回答