【问题标题】:Built-in C#/VB.Net editor with intellisense - Roslyn, VSTA, or something else?具有智能感知功能的内置 C#/VB.Net 编辑器 - Roslyn、VSTA 还是其他?
【发布时间】:2012-09-30 20:20:17
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c# vb.net roslyn vsta


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    你想要达到的,只能通过两个重要的组件来实现,

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

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

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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2012-02-09
      相关资源
      最近更新 更多