.NET脚本语言

16

在.NET应用程序中,人们使用什么进行脚本编写?MS放弃IronPython后的新问题。

IP曾经是我最喜欢的;然后是Lua。

我的意思是我有一个大型系统管理工具,允许用户插入一些智能部件,包括程序集和脚本。应该使用什么语言来编写脚本呢?因此,我需要一个可嵌入的解释器,最好是一个与.NET集成良好的解释器。

微软的公告在这里:

http://www.theregister.co.uk/2010/10/22/microsoft_kills_dynamic_languages_projects/

F# - 有几个人说F#。F#可作为嵌入式脚本语言使用吗?

编辑:我现在的首选是JavaScript;有几个质量很高的.NET实现。


你的意思是指在静态编译的应用程序内部进行运行时动态评估吗?还是只是用于一般脚本编写? - Stephen Swensen
请问您能否澄清一下您的问题,您是否想要为您的应用程序添加脚本支持? - Bobby
3
你从哪里得知微软放弃了IronPython? - abatishchev
1
我认为他谈论的是这个:Jim Hugunin - 离开微软 http://bit.ly/9EUczH - Nick Martyshchenko
@stephen 静态应用中的动态评估 - pm100
显示剩余3条评论
13个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
9

Powershell 是一个基于 .net 的本地脚本外壳,可以被导入到您的应用程序中。随着时间的推移,我已经开始使用它来进行单元测试以及提供可扩展性。它还在 Windows 7 之后的每个版本中都有自带,因此您不需要担心安装问题,并且正在开发基于 mono 的版本。


此外,PowerShell 允许您在脚本中实例化 .NET 类对象并使用它们的功能等。 - Will Marcouiller
我以前研究过这个问题,但总觉得 PowerShell 太像 shell(而且主机设置很麻烦)。你有没有好的网站指导如何嵌入 PowerShell? - pm100
关于托管PowerShell引擎的网站,请尝试使用谷歌(http://www.google.com/search?q=hosting+powershell)。托管绝对不难。如果您不想提供正式的PS主机,您也可以分叉powershell.exe,并将输入发送到它,收集文本输出。我为C#完成引擎做到了这一点,效果很好。不确定您所说的“PS太像shell”的意思是什么。它是一个shell。问题是,它是否满足您特定情况下的可扩展性要求?它是否是一个shell可能并不重要。 - Cheeso

6
我们大多数情况下使用C#进行脚本编写。在自己的应用程序中进行编译和集成是可行的。即使作为纯脚本的替代方案也可以以一种很好的方式实现,可以查看http://www.csscript.net/。 过了一段时间,我遇到了IronPython。如果我必须重新设计我的应用程序中的脚本,我会选择它,因为它在运行时证明具有更大的灵活性。无需繁琐的AppDomain处理等其他方面。

3

3

3

IDE脚本编写(类似于VBA):

Visual Studio Tools for Applications (VSTA) 支持VB和C#。它是目前微软支持的解决方案,旨在取代VSA和VBA。他们曾经忽视过它,但现在重新开始重视。VSTA就像VBA一样,可以提供一个IDE。最终用户需要在其计算机上安装免费的VSTA。

http://www.microsoft.com/en-us/download/details.aspx?id=38806

纯文本脚本编写:

PowerShell

http://blogs.msdn.com/b/kebab/archive/2014/04/28/executing-powershell-scripts-from-c.aspx

Roslyn(这正在取代CodeDom,但仍处于预览状态)

https://roslyn.codeplex.com/

http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx

CodeDom(比您想要的稍微重一些)

http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx

http://www.codeproject.com/Articles/12852/Compile-and-Run-VB-NET-Code-using-the-CodeDom

http://www.codeproject.com/Articles/3289/Dynamic-Code-Generation-and-Code-Compilation

DynamicMethod(我喜欢这个,因为我可以定义带有特定参数和返回的函数代码。它将脚本编写限制在您想要的范围内)

http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx


顺便提一下,如果你想要允许可扩展性而不是即兴编写脚本,请考虑使用像MEF这样的插件框架。这样,最终用户可以独立开发插件,并且可以使用f#、vb、c#、java等语言。 - VoteCoffee
CodeDom?Roslyn?这些不是脚本语言。这些是你可能用来构建脚本语言的工具。 - Trade-Ideas Philip
你可以创建自己的脚本语言,但也有很多支持使用现有语言的工具。请参考这个例子:http://www.jayway.com/2015/05/09/using-roslyn-to-build-a-simple-c-interactive-script-engine/ - VoteCoffee
此外,问题是您用什么进行脚本编写,他澄清这意味着他请求语言和嵌入式解释器的建议。Roslyn是嵌入式解释器的解决方案,支持多种语言。因此,我认为它回答了部分问题。 - VoteCoffee

3


2

2
我们在将近两年前做出了一个决定,最终的选择是Python和Lua。当时,IronPython因为得到微软的支持而被选中。VBA从2007年开始停止向新客户授权,VSTA看起来要便宜得多,但是以每个席位50美元的价格(高5到低6位数的年度承诺),仍然超出了老板所能接受的范围。

看来我们需要重新评估我们的脚本语言决策。我们当前使用的应用程序的许可证售价为中等5位数,并自动化了我们的其他几款软件产品(售价为中3到低4位数)。

可能最适用于应用程序脚本编写的书籍是为游戏开发人员编写的书籍,通常标题为“游戏AI”。许多其他赚钱销售软件的公司已经选择了Lua或Python,有一些不错的理由,阅读一些详细说明为何选择这些语言可能会很有帮助。

1

如果您需要自定义DSL,可以使用DLR编写自己的DSL。http://en.wikipedia.org/wiki/Dynamic_Language_Runtime

我知道的最受欢迎的解析器生成器是antlr,它可以生成.NET解析器。http://www.antlr.org/

对于简单的验证和配置脚本,您可以使用Spring.NET的表达式语言:http://www.springframework.net/doc-latest/reference/html/expressions.html


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