c# - 从 C# 程序集中执行 JavaScript

标签 c# .net javascript unit-testing codedom

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

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

  • 我并没有尝试从我的代码后面调用网页上的 JavaScript 函数。

  • 我不是要加载 WebBrowser 控件。

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

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

我认为可以使用旧的 ActiveX ScriptControl,但似乎应该有一种 .NET 方法可以在不使用 SilverLight、DLR 或任何其他尚未发布的东西的情况下执行此操作。有人有什么想法吗?

更新:From Brad Abrams blog

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")]

澄清: 我们对使用 JSUnit 框架以 JavaScript 编写的 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);
    }
}

关于c# - 从 C# 程序集中执行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67734/

相关文章:

c# - 需要命名空间管理器或 XsltContext

C# 异常和代码中断

c# - NotifyIcon 是否具有 MouseDown 等效项?

c# - 我需要显示我的 ListViewItems 的整个文本(未截断)

c# - EF Core 3.1 到 5 更新 -> IEntityType.GetTableName

javascript - Ember 中的应用程序无法识别该模型,因此最终索引数据为空

c# - 如何在删除 Combox 中的项目后刷新 C#

c# - Google Api GameService 没有个别错误 - .NET

javascript - 拖放 uploader

javascript - 如何使鼠标悬停在页面刷新之前保持不变?