我正在构建一个.NET 3.5应用程序,并且需要在服务器上评估JS代码--基本上是一个用户提供的规则集,可以在浏览器或服务器上工作。托管JS不是一个选项,因为JS代码将在运行时提供。阿普塔纳的Jaxer也不是一个选择。因此,我在我的应用程序中考虑使用V8引擎的构建。
我成功地将源代码构建为DLL,但该DLL不是托管库,也不是COM。V8只是普通的C++。
对于如何在C#中与这种类型的动态链接库进行交互,有什么想法吗?此外,我对SpiderMonkey或另一个JS引擎的其他建议持开放态度。
提前谢谢。
更新:
我用了莱恩的解决方案。我刚刚更新了对构建的引用,以便从主干中获得最新版本。效果很好。谢谢瑞恩。
发布于 2008-12-10 19:29:02
我意识到这可能不是你的问题的确切答案,但我想我会投入我的2美分,因为我怀疑许多人尝试过这一点。
我通过使用混合模式C++创建托管包装器来工作。还有其他方法可以做到这一点,但我打算尝试制作一个可以从任何.NET语言中使用的完整包装器。
要让lib以一种可以包含在混合模式项目中的方式编译,这有点困难。我必须修改用于/MD和/MDd的运行时库(在/MD文件中),以便与/clr开关兼容。
到目前为止,我只运行简单的脚本,因为我还没有实现回调、自定义方法、对象等等。
下面是我的一个测试应用程序的使用情况的快速示例:
V8DotNet.Shell shell = new V8DotNet.Shell();
shell.ExecuteScript(@"print('V8 version is: ' + version());");它还可以运行更复杂的脚本,比如base64编码器。但是现在我只能从c++端添加自定义项。
我愿意提供更多的信息+代码,如果有人感兴趣,因为我可能永远不会选择这个项目回来。但是,我恐怕要在这里发表大量的代码,这样我们就必须找到一些其他媒体,比如google代码或codePlex。
编辑:
好了,我上传了密码。我必须对此提出一个免责声明:这个项目太早了,而且我是C++的业余爱好者,所以不要太抱太大希望。此外,该项目是在chrome发布后创建/完成的,因此包含的v8版本可能已经过时。
也就是说,这里是:http://ryanscook.com/Files/V8-DotNet.zip (21.5MB)
在该包中,您将发现以下感兴趣的项目:
V8Net-Library\V8.Net\V8.Net.sln - -这是一种解决方案,有托管C++包装器proj和用于测试的C#控制台应用程序。 依赖项\ V8 - --这是我用来构建V8库的V8代码。
希望能帮上忙!
发布于 2010-07-05 22:34:49
您可以尝试Javascript .NET:
http://javascriptdotnet.codeplex.com/
它允许您从V8创建一个.NET上下文,并在其中注册CLI对象,这样您就可以操纵它们并从Javascript代码中调用成员。它在运行时编译Javascript。
看看这个。
发布于 2010-06-30 02:54:44
看看v8sharp。它支持在.NET应用程序中执行JS。它还允许您向.NET引擎注册v8类型,以便JS代码可以与.NET代码交互。我正在添加对挂钩功能/委托支持的支持。
https://stackoverflow.com/questions/356948
复制相似问题