当前位置:  开发笔记 > 编程语言 > 正文

从C#程序集中执行JavaScript

如何解决《从C#程序集中执行JavaScript》经验,为你挑选了1个好方法。

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

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

我不是试图从我的代码背后调用网页上的JavaScript函数.

我不是要加载WebBrowser控件.

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

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

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

更新:来自Brad Abrams博客

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#单元测试的成功/失败,并将它们用作指示是否构建被打破.



1> scubabbl..:

代码应该是非常自我解释的,所以我只是发布它.



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);
    }
}


我认为其他人已经指出Microsoft.VSA命名空间已经在VS2008/.NET 3.5中被标记为过时...只要作者知道这一点并且针对早期版本我觉得它很酷.我应该指出,我没有仔细检查它们.:)
推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有