只是想知道是否有人尝试过将任何js引擎嵌入到。net环境中。我可以找到并实际使用(经过大量的痛苦和努力,因为它相当过时,还没有完全完成)spidermonkey-dotnet项目。有人有这方面的经验吗?引擎像SquirrelFish, V8..

并不是说我对Mozilla的Spidermonkey不满意(在核心ASP中使用它为自定义组件提供类似rails的迷你框架)。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)。让普通人用js编程比用c#更容易(也更安全)。


当前回答

我刚刚尝试了RemObjects Script for . net。

它可以工作,尽管我不得不从JavaScript中使用一个静态工厂(var a= a . createa();)而不是var a=new a()语法。(ExposeType函数只暴露静态数据!) 没有太多的文档,源代码是用Delphi Prism编写的,这对我和RedGate Reflector来说是相当不寻常的。

所以:易于使用和设置,但对高级场景没有多大帮助。

另外,不得不安装一些东西,而不是仅仅将程序集放在一个目录中,这对我来说是一个负面影响……

其他回答

试试Javascript . net吧。它最初托管在CodePlex上,这里)

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

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

嘿,在codeplex (http://javascriptdotnet.codeplex.com/)上看看Javascript . net的0.3.1版本,有一些非常棒的新特性,你可能会感兴趣。

查看示例代码:

// Initialize the context
JavascriptContext context = new JavascriptContext();

// Setting the externals parameters of the context
context.SetParameter("console", new SystemConsole());
context.SetParameter("message", "Hello World !");
context.SetParameter("number", 1);

// Running the script
context.Run("var i; for (i = 0; i < 5; i++) console.Print(message + ' (' + i + ')'); number += i;");

// Getting a parameter
Console.WriteLine("number: " + context.GetParameter("number"));

我知道我打开了一个旧线程,但我已经在smnet (spidermonkey-dotnet)上做了很多工作。在最近几年。它的主要开发重点是将.net对象无缝嵌入spidermonkey引擎。它支持从js值到.net对象的各种转换。其中包括代表和活动。

只是说,现在可能值得一查,因为它有一些稳定的发展:)。 我保持SVN回购更新bug修复和新功能。源文件和项目解决方案文件已配置为在下载时成功构建。如果在使用过程中有任何问题,请随时与我们讨论。

我确实理解人们对托管javascript解决方案的渴望,但在我使用过的所有托管javascript中,它们都非常缺乏一些关键特性,这些特性有助于使它们既健壮又易于使用。我自己也在等待IronJS成熟一点。当我等待的时候,我玩spidermonkey-dotnet =)

Spidermonkey-dotnet项目和下载页面

编辑:今天下午创建了文档维基页面。

使用JSCRIPT。NET获取js的库(dll)。然后在. net应用程序中引用这个dll,就完成了。完成了!

如果语言不是问题(任何沙盒脚本语言),那么。net有LUA。. net框架的Silverlight版本也是沙盒的。