如何在C#应用程序中为用户提供类似于Excel-VBA环境的功能

4
我希望给用户提供基于我的类层次结构(内存中的对象)的自定义报告的机会。像VBA这样的脚本语言:Visual Basic for Application。希望在运行时进行评估。
我希望用户能够根据仅标有特定属性的一些可用受限对象动态创建自己的报告。给用户创建宏的可能性,其中他具有与VBA-Excel中相似的模型:Application/Workbook/WorkSheet/Range/...但是使用我的特定选定对象。
然后,他将能够使用智能感知并向其应用程序添加自己的功能。
更新:对我来说非常重要的是,编辑器最好是应用程序本身的一部分,以便脚本知道它应该与之交互的所有环境(命名空间、对象等)。否则,在单独的进程中具有脚本引擎/编辑器将迫使应用程序成为“单实例”应用程序或创建一个棘手的方式将脚本钩接到特定运行应用程序进程。
它是否存在,并如何将其插入到.NET应用程序中?
已经提出了4个解决方案:
  1. IronRuby
  2. CsScript
  3. WinWrap
  4. Windows Scripting Host (WSH)

我还发现了:

  1. ScriptCs
  2. RoslynPad
  3. Code Project - Anoop Madhusudanan article: C# as a Scripting Language in Your .NET Applications Using Roslyn

但我想知道哪一个可以满足所有需求(或大部分需求):

  1. 具有智能感知的编辑器
  2. 用户可以访问当前正在运行的进程对象模型(应用程序作为全局对象,所有相关对象通过应用程序属性访问)。可选但非常好的功能:不一定是每个公共属性,只有标记有特定属性的属性。
  3. 交互式环境,可以逐步进行调试、断点等操作
  4. 编辑器/调试器免费授权再分发
  5. 不是必需的,但最好使用C#语言

实际测试:

  • 我尝试评估#2,但没有包含所有模块的VS项目示例(似乎有点难以组装)。
  • 我目前正在评估#6,它似乎工作正常(我纠正了一个小错误)。它似乎符合大多数要求,但不符合#3。但它似乎是迄今为止最接近我的需求的解决方案。它还使用Roslyn,这对我来说是一个积极因素,因为它是微软编译器,应该始终保持最新。

我仍在等待任何人的反馈,无论是其他更好的解决方案还是任何建议,以帮助我做出更好的决策。


你特别想要使用VBA吗? - Maz
@Maz,不一定,任何等效的东西都可以。 - Eric Ouellet
你也可以看一下http://www.winwrap.com。 - Sorceri
1
Windows Scripting Host 允许你在 C# 中,在运行时将 VBScript/JScript 与直接导出的固定命名对象实例一起使用到脚本文件中(使用 ComVisible() 轻松完成此操作以显示隐藏成员)。虽然没有集成的 IDE,但我提到它是因为 VBScript 对于初学者来说非常简单易懂。 - Alex K.
是的,您需要一个外部编辑器,例如带有脚本高亮功能并允许自定义自动完成的NPP。 - Alex K.
显示剩余4条评论
1个回答

0

经过一番思考、试错,我的需求变得更加明确,我对 Roslyn 开发的现状也有了更好的了解。

我意识到 Oleg Shilo(CS-Script 的作者)是正确的,即 Roslyn (2014-10-21)还没有准备好帮助我进行智能感知。但我认为这应该很快就会发生。我觉得值得等待。但它可以将代码编译并在同一个运行的应用程序中运行,这正是我想要测试的。

尽管现在可能有其他方法可能效果更好。但我认为像 RoslynPad 这样的解决方案更接近我的需求的理想解决方案。大多数提出的其他解决方案适用于一般脚本编写,但不如 RoslynPad 适用于应用程序内部自己的脚本编写...至少根据我的观点。

然后,我修复了 RoslynPad 中的一些小问题,并将其与最新的 AvalonEdit 集成在一起,同时修复了一些自动完成的其他问题(但仍存在一些错误)。

现在,我的需求已经得到满足:

  • #1 部分(当 Roslyn 支持并记录它时准备完全支持它)
  • #2 完全
  • #3 否(当 Roslyn 支持并记录它时准备完全支持它)
  • #4 完全
  • #5 完全

非常感谢所有给我提供想法、链接和非常好的建议的人。


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