从 C# 程序集中执行 JavaScript

2024-05-02

我想从 C# 程序集中执行 JavaScript 代码,并将 JavaScript 代码的结果返回到调用 C# 代码。

定义我不想做的事情更容易:

  • 我并不是试图从我的代码隐藏中调用网页上的 JavaScript 函数。

  • 我不想加载 WebBrowser 控件。

  • 我不想让 JavaScript 对服务器执行 AJAX 调用。

我想做的是用 JavaScript 编写单元测试,然后让单元测试输出 JSON,甚至纯文本也可以。然后我想要一个通用的 C# 类/可执行文件,它可以加载包含 JS 的文件,运行 JS 单元测试,废弃/加载结果,并在构建后任务期间返回包含详细信息的通过/失败。

我认为使用旧的 ActiveX ScriptControl 是可能的,但似乎应该有一种 .NET 方法来做到这一点,而不需要使用 SilverLight、DLR 或任何其他尚未发布的东西。有人有主意吗?

update: 来自布拉德·艾布拉姆斯博客 http://blogs.msdn.com/brada/articles/239857.aspx

namespace Microsoft.JScript.Vsa
{
    [Obsolete("There is no replacement for this feature. " +
              "Please see the ICodeCompiler documentation for additional help. " +
              "http://go.microsoft.com/fwlink/?linkid=14202")]

澄清: 我们对 JavaScript 函数进行了单元测试,这些函数是使用 JSUnit 框架用 JavaScript 编写的。现在,在构建过程中,我们必须手动加载网页并单击按钮以确保所有 JavaScript 单元测试都通过。我希望能够在运行自动化 C# 单元测试时在构建后过程中执行测试,并与 C# 单元测试一起报告成功/失败,并将它们用作是否构建的指示器被打破。


该代码应该是非常不言自明的,所以我将其发布。

<add assembly="Microsoft.Vsa, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies>

using Microsoft.JScript;

public class MyClass {

    public static Microsoft.JScript.Vsa.VsaEngine Engine = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();

    public static object EvaluateScript(string script)
    {
        object Result = null;
        try
        {
            Result = Microsoft.JScript.Eval.JScriptEvaluate(JScript, Engine);
        }
        catch (Exception ex)
        {
            return ex.Message;
        }

        return Result;
    }

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

从 C# 程序集中执行 JavaScript 的相关文章

随机推荐

  • 如何使用 Core Data (iPhone) 存储 CLLocation?

    我试图保存一个位置 然后使用 Core Location MapKit 和 Core Data 框架在地图上检索该位置 我所做的只是创建了名为 POI 的实体 并添加了诸如纬度 双精度类型 经度 双精度类型 等属性以及其他一些属性 简而言之
  • Mongoose/Mongodb更新返回值及错误处理

    我对 Mongodb update 的返回值以及如何处理它的错误有点困惑 我使用 Node js Express js 和 Mongoose js 作为我的 Mongodb 驱动程序 当我浏览许多教程时 我看到的错误处理的唯一方法是 示例
  • 使用 Template Haskell 生成函数

    是否可以使用 Template Haskell 定义函数 例如 convertStringToValue String gt Int convertStringToValue three 3 convertStringToValue fou
  • 如何从视图中删除单元测试的“@oidc.login_required”?

    I use 烧瓶样机 questions tagged flask oidc用于用户登录和pytest questions tagged pytest供测试用 对于单元测试 我想 删除 oidc require login 我怎样才能做到这
  • 按复杂对象中的列表排序

    我有两节课 public class Customer public string FirstName get set public string LastName get set public List
  • 根指令上的 Angular 2 输入参数[重复]

    这个问题在这里已经有答案了 This https angular io docs ts latest api core Input var html示例展示了如何在子组件上使用 Input 注释 我的问题是如何在根组件上使用它 例如 如果您
  • Code First 中的一对多关系播种

    我得到了以下简单模型 该模型正在代码优先方法中实现 部门和课程是一对多的关系 一个系可以有很多门课程 而一门课程可以只属于一个系 这是模型 public class Department public int DepartmentId ge
  • 如何从设备名(UITableViewCell)的tableview中显示蓝牙支持的服务?

    我正在开发蓝牙应用程序 我在表视图中有一个可用蓝牙设备的名称 如果按下一个设备意味着我想知道另一个带有表视图的视图控制器中支持的所有服务 UUID 名称 给我一个想法 1 外设管理器 NSObject 2 FirstViewControll
  • 美丽的汤 - urllib.error.HTTPError:HTTP 错误 403:禁止

    我正在尝试下载 GIF 文件urrlib 但它抛出了这个错误 urllib error HTTPError HTTP Error 403 Forbidden 当我从其他博客网站下载时 不会发生这种情况 这是我的代码 import reque
  • 在 Pascal 中将文本文件中的字符串读入数组

    使用这个程序 我试图读取一个文件并将其随机打印到控制台 我想知道是否必须使用数组 例如 我可以将字符串分配到一个数组中 然后从数组中随机打印 但是 我不确定如何解决这个问题 另一个问题是 我当前的程序没有从我的文件中读取第一行 我有一个文本
  • 两个人同时在 git 中处理一个文件[重复]

    这个问题在这里已经有答案了 可能的重复 当两个对等点同时将更改推送到同一个远程时 git 如何工作 https stackoverflow com questions 4643998 how git works when two peers
  • 如何在 React 中实现拖放行为

    我正在尝试使用 React 和实现拖放行为反应美丽 dnd https github com atlassian react beautiful dnd图书馆 我想使用选择一些图像反应 dropzone https react dropzo
  • Python setup.py:data_files无法复制“目录”:不存在或不是常规文件

    我有以下 python 项目结构 setup py doc file css file html file js src matlabsources
  • ValueError:缺少“favicon.ico”的静态文件清单条目

    我得到了一个ValueError跑步时python manage py test 我的项目名为fellow go 我目前正在开发一个名为pickup 请注意 此错误是在最近对 Django 的提交中添加的 已修复 24452 修复了 Has
  • 从不同的程序集中动态加载类(具有自定义行为)?

    我们正在为少数客户构建应用程序 每个客户都有自己的要求以及类似的要求 我们还希望将所有代码保留在同一个应用程序中 而不是对其进行分支 并且 IF 不是一个好的选择 因为它会遍布各处 我计划为所有人开设基础课程 然后每个客户都会有自己的类 其
  • 即使更改内容后,Chrome 扩展程序弹出窗口也会重置

    在我的 chrome 扩展中 我必须从背景更改弹出 html 更改会影响然后 再次单击扩展图标后 将显示未更改的弹出窗口 为什么 每次您单击远离弹出窗口时 该窗口都会重置 解决此问题的一种方法是使用后台页面来存储会话数据 在 popup j
  • 如何从 Graph Explorer 查询另一个 Azure Active Directory 租户

    我正在使用 Azure Graph API 资源管理器 我想查询租户中的应用程序列表 我是tenant x 最初创建用户的位置 中的用户 也是tenant y 后来与我的用户创建的 中的管理员 据我所知 当我登录时 我直接进入原始租户 即t
  • 使用rapidjson设置浮点精度

    有没有办法控制使用rapidjson生成的JSON的输出精度 例如 writer String length writer Double 1 0 3 0 这会生成类似以下内容的内容 length 0 33333333 我发送了很多值 并且几
  • 如何使小部件溢出以使滚动条出现在 Qt 中?

    我的小部件的结构是 QWidget 定制为带有圆角边框的面板 要在边界内包含一个带有滚动条并带有边距的区域 然后我将其放入其中 QScrollArea 与 QVBoxLayout 垂直添加内容 然后我在其中添加一系列 标题间距为 0 的 Q
  • 从 C# 程序集中执行 JavaScript

    我想从 C 程序集中执行 JavaScript 代码 并将 JavaScript 代码的结果返回到调用 C 代码 定义我不想做的事情更容易 我并不是试图从我的代码隐藏中调用网页上的 JavaScript 函数 我不想加载 WebBrowse