我正在尝试在C#程序中执行JavaScript,我正在尝试确定:
为JavaScript创建状态机会不会更好,还是应该在执行之前将其编译成MSIL?
我真的在寻找技术而不是解决方案。有些人尝试编译JavaScript,将其视为一种编程语言,其他人则使用状态机并将其视为一种脚本语言。
欢迎使用有关执行方法的任何文档。
答案 0 :(得分:0)
在C#程序中运行JS的最简单方法是使用现有的.Net JS运行时之一:IronJS,Jurassic和Jint。如果你有兴趣在混合中添加另一个基于.Net的解释器,那么检查它们的代码是我开始的地方;如果你在程序中嵌入了JS,那么使用预先存在的JS可能就好了。
答案 1 :(得分:0)
你没有解释你的场景 - javascript多少,它执行的频率,它改变的频率,它与C#逻辑的集成程度,等等。
如果它很少改变,那么通过其中一个替代方案将其编译成MSIL可能是明智的。 如果它“不断”改变,那么站起来JS编译器并根据需要发送它可能是有意义的。这类似于Javascript的REPL,您可以通过编程方式使用它。 Node.js提供了一个可以进行REPL操作的服务器;它可以监听端口,你发送JS进行评估,然后发回结果。可以从cscript.exe中使用a free w3sockets component来执行类似的操作:例如,您可以构建一个“主机”Javascript shell,它侦听套接字,执行它接收的js,然后发回结果。
如果需要与C#代码紧密集成,那么你必须更加聪明。一种方法可能是在Windows Script Component中托管JS,并让C#代码通过COM调用JS逻辑。您也可以进行相反的操作 - 让JS主机通过COM调用C#层来收集输入并传递结果。
修改强>
更好的方法是使用IActiveScript的东西 - 这是微软可以在应用程序中托管脚本的官方方式。有一个winforms示例发布here。
或者更好,请参阅parse and execute JS by C#
使用该代码,我整理了一个演示如何使用IActiveScript从.NET应用程序解析和调用Javascript。
您可以为此应用here下载VS2010项目。