扩展C#.NET应用程序 - 是否构建自定义脚本语言?

cgy*_*per 12 .net c# scripting ironpython ironruby

我需要为我的C#程序构建脚本接口,对嵌入式固件进行系统级测试.

我的应用程序包含与设备完全交互的库.有单独的库用于启动操作,获取输出和跟踪成功/失败.我的应用程序还有一个GUI,用于管理多个设备并分配许多要运行的脚本.

对于测试人员(非程序员,但技术人员),我需要提供一个脚本界面,使他们能够提出不同的测试和运行方案.他们只是调用我的API,然后将结果返回给我的程序(通过/失败和消息).

我想要的一个非常基本的例子:

TURN_POWER_ON
TUNE_FREQUENCY frequency
WAIT 5
IF GET_FREQUENCY == frequency
  REPORT_PASS "Successfully tuned to " + frequency
ELSE
  REPORT_FAIL "Failed to tune to " + frequency
ENDIF
TURN_POWER_OFF
Run Code Online (Sandbox Code Playgroud)

报告,电源和频率功能由我的C#库提供.

像IronRuby或IronPython这样的东西会对此有好处,还是我应该建立自己的基本语言?

在尝试包含一堆.NET编译的程序集时,Ruby/Python代码是否会变得混乱?我希望它对于非程序员和程序员来说都很容易学习和编写代码.

编辑:

感谢所有的好评.我选择IronPython作为答案,因为它得到了最多的支持,但我会花一些时间与IronPython,Boo和IronRuby分别看看测试人员更愿意编写脚本.

Mar*_*ell 16

我听说过IronPython的东西很不错的正是这种类型的场景.我当然冒险花几个小时快速进行概念验证,看看它是如何实现的.

Michael Foord很乐意在类似的情况下(特别是对于他,对于电子表格精明的用户)讽刺IronPython的成功,他的书涵盖了(IIRC)关于从.NET托管它的一些指示.


Rom*_*ier 10

您可能希望查看另一种在CLR上运行的托管语言Boo,它特别适合构建DSL并使您的应用程序可编写脚本.

编译管道可以直接从语言本身扩展.

如果你想了解更多关于它的信息,阅读Boo Manifesto是一个很好的起点.

[ 编辑 ]我忘了提到Ayende Rahien正在写一本关于这个主题的完整书: 在Boo中构建领域特定语言