从 .NET 应用程序引用 Google 的 V8 引擎

2024-01-21

我正在构建一个 .NET 3.5 应用程序,并且需要在服务器上评估 JS 代码 - 基本上是用户提供的规则集,可以在浏览器或服务器上工作。托管 JS 不是一个选项,因为 JS 代码将在运行时提供。 Aptana 的 Jaxer 也不是一个选择。因此,我正在考虑在我的应用程序中使用 V8 引擎的构建。

我成功地将源代码构建到 DLL 中,但该 DLL 不是托管库,也不是 COM。 V8 只是简单的 C++。

关于如何在 C# 中与此类 DLL 互操作有什么想法吗?另外,我愿意接受有关 SpiderMonkey 或其他 JS 引擎的其他建议。

提前致谢。

UPDATE:

我能够使用瑞安的解决方案。我刚刚更新了主干中最新版本的参考。效果很好。谢谢瑞安。


我意识到这可能不是你问题的准确答案,但我想我会花 2 美分,因为我怀疑很多人都尝试过这个。

我通过使用混合模式 C++ 创建托管包装器来使其工作。还有其他方法可以做到这一点,但我打算尝试制作一个可以从任何 .NET 语言使用的完整包装器。

让库以可以包含在混合模式项目中的方式进行编译是一个挑战。我必须修改用于 /MD 和 /MDd 的运行时库(在 SConstruct 文件中),以便它与 /clr 开关兼容。

到目前为止,我只运行了简单的脚本,因为我还没有实现回调、自定义方法、对象等。

以下是我的一个测试应用程序的用法示例:

V8DotNet.Shell shell = new V8DotNet.Shell();

shell.ExecuteScript(@"print('V8 version is: ' + version());");

它也可以很好地运行更复杂的脚本,例如 Base64 编码器。但目前我只能从 C++ 端添加自定义项目。

如果有人感兴趣,我愿意提供更多信息+代码,因为我可能永远不会再选择这个项目。但是,恐怕这里的帖子需要太多代码,因此我们必须找到其他媒体,例如 google code 或 codePlex。

Edit:


好的,我已经上传代码了。我必须对此作出免责声明:这个项目还很早,我充其量只是 C++ 的业余爱好者,所以不要抱太大希望。另外,这个项目是在 chrome 发布后创建/完成的,因此包含的 v8 版本可能是旧的。

也就是说,这里是:http://ryanscook.com/Files/V8-DotNet.zip http://ryanscook.com/Files/V8-DotNet.zip(21.5 MB)

在包装中您会发现以下感兴趣的物品:

V8Net-Library\V8.Net\V8.Net.sln -这 是已托管的解决方案 C++ 包装器项目和 C# 控制台应用程序 供测试用。

依赖项\V8 -这是我的V8代码 我用来构建 V8 库的。

希望能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 .NET 应用程序引用 Google 的 V8 引擎 的相关文章

  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 是否可以在 IIS7 Express 中使用自定义主机标头/绑定?

    我正在尝试配置一个新的ASP NET MVC3 using IIS7快递 在我的本地开发机器上 使用自定义域名 eg 我的本地开发机器 打开我的网络浏览器 goto http dev www mydomain com http dev ww
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • .NET 中是否有内置函数可以对密码进行哈希处理?

    我看到这个问题加密 散列数据库中的纯文本密码 https stackoverflow com questions 287517 encrypting hashing plain text passwords in database 我知道我
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • 从数据库检查数据的异步解决方案各种循环子句

    我想要做的是异步检查数据库并从中获取结果 在我的应用程序中我试图实现Asynchronously将此步骤解决为 从数据库中检查手机号码JsonArray循环子句的种类 Create JsonArray从结果 打印创建的数组 我学到了足够多的
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • 对于只触及我的工作表的 Google 表格脚本,收到“此应用程序未经验证”

    我正在编写一个 Google Sheets 脚本 我只想访问与 gs 文件关联的同一电子表格中的数据 似乎我应该有权在自己的电子表格中运行脚本 但是每当我运行一个函数时 我都会得到一个This app isn t verified信息 我该
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • 如何用另一个响应替换窗口的 URL 哈希?

    我正在尝试使用替换方法更改哈希 URL document location hash 但它不起作用 function var anchor document location hash this returns me a string va
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 如何使用 unique_together 建立抽象模型?

    为什么我得到 Error One or more models did not validate test test unique together refers to slug This is not in the same model
  • 使用kinect检测身体关节角度(检查时间间隔)

    正如您在图片中看到的 链接如下 当左手举起时 它会显示一个角度 我想要的是 一个人应该握住他的手臂 5 秒 如图所示的位置 并且如果该人改变其手臂位置 这意味着角度低于 70 度或高于 80 度 5 秒内应显示一些消息 将手臂放回同一位置
  • Plotly 中的 $ 刻度格式化程序尊重负值

    Per the answer https stackoverflow com a 58142945 1840471 to 使用python中的plotly方法在y轴刻度中添加货币符号 https stackoverflow com q 58
  • 根据日期从 git 签出旧提交

    由于与另一个项目 共享此代码 不兼容 我正在尝试从 git 检索旧提交 git 存储库是 OpenZWave 我发现 SO 上有一个帖子说要发出命令 git checkout 14 days ago 但这会导致 warning Log fo
  • 使用 Node jS 的 Redis 配置集

    Team 我正在尝试使用 NODE js 应用程序在运行时设置 redis 的配置 如下所示 让 setConfig 等待 this cacheConnection config set notify keyspace events Ex
  • 获取简单注入器的容器实例

    我正在 ASP NET MVC 项目中使用简单注入器 我添加了SimpleInjector Integration Web Mvcnuget 包 这增加了SimpleInjectorInitializer上课于App Start文件夹并初始
  • 如何禁用特定控件的默认皮肤?

    是否可以有一个不使用 skin 文件中指定的默认外观的控件 我有一个我要做的控件not想要应用默认皮肤 在大多数 ASP NET 书籍中都可以找到此解决方案 使用 EnableTheming
  • 代码隐藏中的 .NET / C# 字符串引用未加载更新值

    我似乎遇到了一个奇怪的问题 即字符串引用没有加载更新的值 简而言之 我替换了一个包含一堆页面标题 例如 HTML 页面标题 的 DLL 文件 App Code dll 但从其他 DLL 引用时 这些值并未更新 以下是示例页面代码隐藏中的代码
  • WPF TreeView,在PreviewMouseDown事件中获取TreeViewItem

    如何确定在 PreviewMouseDown 事件中单击的 TreeViewItem 以下似乎有效 private void myTreeView PreviewMouseDown object sender MouseButtonEven
  • 使用反射输入计算 CRC64 的最有效方法

    我需要使用计算 CRC 64这个设置 https i stack imgur com Tdj7Z png进入这个精彩的网站 http www sunshine2k de coding javascript crc crc js html h
  • MySQL 锁等待超时

    我有错误Lock wait timeout exceeded try restarting transaction 出现这种情况的原因是什么以及如何解决 供参考 innodb lock wait timeout 100在 MySQL 配置文
  • 是否有 FMX 函数可以在运行时设置 TImage 的透明颜色?

    我在 FMX FireMonkey 的表单上有一个 TImage 我想在运行时将位图加载到 TImage 中 其中位图应该具有由位图中第一个像素的颜色定义的透明背景 该颜色可能因位图而异 我知道如何在设计时通过使用 TImage 的 Mul
  • 将变量从伏特发送到自定义函数

    我创建了一个可以从 volt 访问的自定义函数 该函数似乎工作正常 但我无法设法将变量发送到该函数 它将变量作为文本而不是其值发送 树枝功能 volt gt getCompiler gt addFunction getusergroup f
  • 通过WIFI认证后User.Identity.Name为空

    我正在使用 WIFI 登录我的应用程序 一切似乎都很好 日志记录 重定向到网站等 但是当我尝试使用User Identity Name在我的鳕鱼异常被抛出 User为空 有什么想法我做错了吗 我在 VS 2012 上工作 web confi
  • xsl-fo:并行的两份报告,一份在奇数页,另一份在偶数页

    我想生成一个 PDF 其中一个内容流在奇数页 另一个内容流在偶数页 因此当您双面打印 PDF 时 您有一个模板可以在偶数页上写笔记 这是我所拥有的 但它不起作用
  • 使用 Hibernate 管理多租户应用程序中的连接池

    我正在尝试使用单独的架构方法设置多租户应用程序 我正在使用 JPA 和 Hibernate 4 实现 就像 说的ben75 https stackoverflow com users 1818045 ben75在这个非常有用的thread
  • 在 C 中对 int 进行符号扩展

    所以我在获取 int 字段然后对其进行符号扩展时遇到了一些麻烦 我有一个获取 int 字段的方法 getField int value int hi int lo Value 是我从中获取字段的 int hi 和 lo 是字段的大小 所以我
  • 选择所有具有 png 背景图像的 div

    我怎样才能在 jQuery 中选择所有div是有background image url somepath somename png 以他们的风格 尝试添加自定义选择器 document ready function extend expr
  • 如何将 Prop 传递给导航屏幕组件 - React Native

    我对 React Native 还很陌生 我在 App js 文件中创建了一个抽屉导航器 我的导航组件之一是一个名为登录界面 我正在尝试将道具传递给登录界面当用户导航到它时显示 App js 导航器 const Tab createMate
  • 从 .NET 应用程序引用 Google 的 V8 引擎

    我正在构建一个 NET 3 5 应用程序 并且需要在服务器上评估 JS 代码 基本上是用户提供的规则集 可以在浏览器或服务器上工作 托管 JS 不是一个选项 因为 JS 代码将在运行时提供 Aptana 的 Jaxer 也不是一个选择 因此