从.NET应用引用Google的V8引擎
我正在构build一个.NET 3.5应用程序,并且需要评估服务器上的JS代码 – 基本上用户提供的规则集可以在浏览器或服务器上工作。 托pipe的JS不是一个选项,因为JS代码将在运行时提供。 Aptana的Jaxer也不是一种select。 所以我正在考虑在我的应用程序中使用V8引擎的构build。
我成功地将源代码构build到DLL中,但该DLL不是托pipe库,也不是COM。 V8只是普通的C ++。
任何想法如何与C#中的这种types的DLL互操作? 此外,我打开其他SpiderMonkey或其他JS引擎的build议。
提前致谢。
更新:
我能够使用瑞安的解决scheme。 我只是更新了从中继到最新版本的参考。 它运作良好。 谢谢瑞安。
我意识到这可能不是你的问题的确切答案,但我想我会把我的2美分的价值,因为我怀疑很多人都试过这个。
我通过使用混合模式C ++创build了一个托pipe包装来实现它。 还有其他方法可以做到这一点,但是我打算尝试使用任何.Net语言来制作一个完整的包装器。
让lib编译成可以包含在混合模式项目中的方式有点难度。 我必须修改用于/ MD和/ MDd的运行时库(在SConstruct文件中),以便与/ clr开关兼容。
到目前为止,我只有简单的脚本运行,因为我没有实现callback,自定义方法,对象等。
下面是我的一个testing应用程序的使用情况的快速示例:
V8DotNet.Shell shell = new V8DotNet.Shell(); shell.ExecuteScript(@"print('V8 version is: ' + version());");
它运行更复杂的脚本,如base64编码器也很好。 但现在我只能从c ++端添加自定义项目。
我愿意提供更多的信息+代码,如果有人感兴趣,因为我可能不会select这个项目备份。 但是,恐怕有很多代码需要在这里发布,所以我们必须find一些其他的媒体,比如google code或者codePlex。
编辑:
好的,我已经上传了代码。 我必须在此声明一个免责声明: 该项目是非常早的,我是一个业余的C + +所以不要让你的希望高。 另外,这个项目是在chrome发布之后创build/完成的,所以v8的版本可能会比较旧。
这就是说,这里是: http : //ryanscook.com/Files/V8-DotNet.zip (21.5 MB)
在包装中,您会发现以下有趣的内容:
V8Net-Library \ V8.Net \ V8.Net.sln –这是具有托pipeC ++包装程序和C#控制台应用程序进行testing的解决scheme。
依赖关系\ V8 –这是我用来构buildV8库的V8代码。
希望能帮助到你!
你可以尝试使用Javascript .NET:
http://javascriptdotnet.codeplex.com/
它允许您从.NET创buildV8上下文,并在其中注册CLI对象,以便您可以操作它们并从Javascript代码中调用成员。 它在运行时编译Javascript。
一探究竟。
看看v8sharp 。 它支持在.NET应用程序中执行JS。 它还允许你用v8引擎注册.NETtypes,这样你的JS代码就可以和你的.NET代码交互了。 我正在添加对hooking函数/委托支持的支持。
微软正在使用DLR在CLR上构build一个真正的javascript(而不是“JScript”)运行时 (以及IronPython,IronRuby和VB10),但是我找不到任何下载或内容。 也许这将与C#4?
从我听到的编译IJW(托pipeC + +)应该只是工作 – 但我可能是错的,我从来没有碰过MC ++。
我猜gatapia用jish取代了js.net
- Marshal.SizeOf在枚举上抛出ArgumentException
- 如何在WindowsC ++ / CLI中获取应用程序可执行文件的名称?
- 最喜欢的Visual Studio键盘快捷键
- WCF – net.pipe与net.tcp与http绑定
- WrapPanel不包裹在WPF ListView中
- IEquatable和刚刚重写Object.Equals()之间有什么区别?
- 在EntityFramework.dll中发生未处理的“System.TypeInitializationException”typesexception
- 日志logging,面向方面的编程和dependency injection – 试图理解这一切
- .NET中的java.lang.IllegalStateException?