将 JavaScript 引擎嵌入 .NET

IT技术 c# javascript spidermonkey
2021-01-28 13:52:05

只是想知道是否有人曾尝试将任何 js 引擎嵌入并实际集成到 .net 环境中。我能找到和实际使用(一后LOT艰辛和努力的,因为它是非常过时的,不完全结束)SpiderMonkey的-的dotnet项目。有人在这方面有经验吗?SquirrelFish、V8 等引擎

并不是说我对 Mozilla 的 Spidermonkey 不满意(将它用于类似 Rails 的微型框架,用于在核心 ASP.NET 应用程序中的自定义组件),但我仍然喜欢进一步探索这些选项。命令行解决方案不是我需要的,我不能依赖 CLR 以外的任何东西,我需要从/向 JavaScript/C# 对象调用方法。

// c# class
public class A
{
    public string Hello(string msg)
    {
        return msg + " whatewer";
    }
}

// js snippet
var a = new A();
console.log(a.Hello('Call me')); // i have a console.log implemented, don't worry, it's not a client-side code :)

只是为了澄清 - 我并没有尝试在服务器端 javascript 中实际对应用程序本身进行编程它仅用于编写自定义用户子应用程序(可以看作是某种 DSL)。与 C# 相比,允许普通人使用 js 编程更容易(也更安全)。

6个回答

尝试Javascript .NET它托管在 GitHub 上它最初托管在 CodePlex 上,这里)

项目讨论:http : //javascriptdotnet.codeplex.com/discussions

它实现了谷歌 V8。您可以使用它直接从 .NET 代码编译和运行 JavaScript,并提供 JavaScript 代码使用的 CLI 对象。它从 JavaScript 生成本机代码。

Noesis(最初的开发公司)对该项目失去了兴趣,但最终决定将控制权交给社区。因此,现在有一个包含许多错误修复的新版本。不幸的是,尚不支持来自 .Net 的 JavaScript 回调。
2021-03-16 13:52:05
有人声称这在项目的讨论板上已经死了,超出基本示例的文档很差,我正在努力将 JavaScript 事件处理程序添加到脚本中的 .Net 事件。
2021-03-29 13:52:05
未来的另一个注意事项:Nuget 包似乎以某种方式被破坏了......当您安装该包时,它目前并不能“正常工作”。
2021-03-29 13:52:05
+1。这很简单,而且似乎效果很好。
2021-03-31 13:52:05
由于 javascriptdotnet 已死,请考虑改用 ClearScript(请参阅此答案
2021-04-10 13:52:05

开源 JavaScript 解释器 Jint ( http://jint.codeplex.com ) 完全符合您的要求。

编辑:
该项目已完全重写,现在托管在 Github 上,网址https://github.com/sebastienros/jint

2011 年最后一次发布......侏罗纪似乎更好。
2021-03-25 13:52:05
我认为它是在 Delphi Prism / Oxygen 上编写的,并作为源代码提供,因此如果您还没有购买上述产品的许可证,那么它就没有那么有用了。我错了吗?如果任何地方都有二进制形式的版本,我想尝试一下。
2021-03-29 13:52:05
RemObjects 脚本是用 Oxygene 编写的,是正确的,但您实际上并不需要 Oxygene 许可证来使用它 - 一方面,您可以从remobjects.com/free获取二进制安装程序,另一方面,您甚至可以获得免费的 Oxygene 命令行编译器,如果您确实需要从源头上自己重建它。毕竟,.NET 平台的一大好处是语言独立。库是用什么语言编写的并不重要,你可以使用它。
2021-03-29 13:52:05
建立在 DLR 之上的另一种可能性:用于 .NET 的 RemObjects 脚本 remobjects.com/script.aspx blogs.remobjects.com/blogs/ck/2010/02/23/p1175
2021-04-09 13:52:05
实际上是 2014 年的最后一次发布:github.com/sebastienros/jint
2021-04-09 13:52:05

您可能还对 托管在 GitHub 上并在 Ms-Pl 许可下发布的Microsoft ClearScript感兴趣

我不是微软的粉丝,但我必须承认 V8 支持与 Javascript.Net 具有大致相同的功能,更重要的是,该项目仍在维护。就我而言,对委托的支持也比 Spidermonkey-dotnet 更好。

ps:它也支持 JScript 和 VBScript 但我们对这个老东西不感兴趣。

ps:兼容.NET 4.0和4.5+

+1 我完全不知道这个项目,看起来很有希望,希望它不会像大多数其他试图做同样事情的项目一样消亡!
2021-03-15 13:52:05
这是我的 ClearScript 问题。运行时它会抱怨缺少 dll。然后我被要求安装额外的 Visual Studio 组件。这没问题,除非我没有管理员权限来运行代码。如果它完全包含在 dll 中,那就太好了。
2021-03-23 13:52:05
我在使用 Windows.JScript 引擎的 ClearScript 中发现的一件事是 .net 对象现在区分大小写,旧的 ScriptControl 对象无关紧要。
2021-03-29 13:52:05

任何人只要调整一下,也可以看看侏罗纪:

http://jurassic.codeplex.com/

编辑:这已转移到 github(乍一看似乎很活跃)

https://github.com/paulbartrum/jurassic

嗨芥末,我找不到关于如何序列化执行上下文的运行状态的任何信息。你是怎么做到的?
2021-03-13 13:52:05
似乎这是为数不多的同时具有原生 .NET 代码(而不是使用 f.ex. V8 引擎)并且似乎仍然受支持的项目之一(Ecmascript.net、jscript.net 和其他一些似乎是死的)。+1 并感谢您的链接!
2021-03-19 13:52:05
会添加我对侏罗纪的支持。它还具有序列化执行上下文的运行状态的能力。这意味着您可以从字面上保留您的 JavaScript 运行时、变量和所有内容。在某些情况下非常有用的功能。
2021-03-21 13:52:05
在查看了这些答案中列出的每个项目后,我开始关注侏罗纪。它是仍在积极维护的仅有的两三个之一,它是真正的 JS,经过高度测试,并且是纯 .NET。
2021-04-08 13:52:05

你可以试试 IronJS,虽然它正在大量开发中,但看起来很有希望。https://github.com/fholm/IronJS

我们目前使用 IronJS,但现在它是一个死项目,编译器是用 F# 编写的,我可以使用它但不精通。
2021-03-12 13:52:05