从C#程序集中执行JavaScript
我想从C#程序集中执行JavaScript代码,并将JavaScript代码的结果返回给调用的C#代码。
定义我不想做的事情更容易:
我想要做的是在JavaScript中编写unit testing,然后unit testing输出JSON,即使是纯文本也没问题。 然后我想要一个通用的C#class / executible,可以加载包含JS的文件,运行JSunit testing,废弃/加载结果,并在后期构建任务中返回带有详细信息的通过/失败。
我认为使用旧的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. " + "https://go.microsoft.com/fwlink/?linkid=14202")]
澄清:我们对使用JSUnit框架用JavaScript编写的JavaScript函数进行了unit testing。 现在,在构建过程中,我们必须手动加载网页并单击按钮以确保所有JavaScriptunit testing都通过。 我希望能够在运行后自动C#unit testing的后期构建过程中执行测试,并报告C#unit testing的成功/失败,并将它们用作指示是否构建被打破。
您可以使用JSUnit服务器从Nant内部运行JSUnit,它是用java编写的,并且没有Nant任务,但您可以从命令提示符运行它,结果以XML格式记录,您可以将它们与构建报告集成处理。 这不是您的Nunit结果的一部分,而是额外的报告。 如果任何测试失败,我们将失败。 我们正在使用CC.Net做到这一点。
代码应该是非常自我解释的,所以我只是发布它。
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 Javascript引擎来评估来自C#的JavaScript代码
更新:从VS 2008开始,这已经过时了
我现在还不知道有任何特定于.NET的方法吗…好吧,仍然有JScript.NET,但这可能与你需要执行的任何JS兼容:)
显然,未来将是DLR的.NET JScript实现,有朝一日(希望如此)。
所以这可能会留下运行旧的ActiveX JScript引擎,这当然可以通过.NET实现(我以前做过它,虽然它有点丑陋!)。
如果您没有在浏览器的上下文中执行代码,为什么测试需要用Javascript编写? 很难理解你在这里想要完成的事情的大局。
是否可以更简单地使用JSUnit编写测试,然后使用WatiN测试包装器通过C#运行它们,根据JSUnit结果传递或失败?
这确实是一个额外的步骤。
我相信我在某处读到MBUnit或WatiN即将推出的版本将具有内置的function来处理JSUnit测试夹具。 只要我记得我在哪里读到……
上述就是C#学习教程:从C#程序集中执行JavaScript分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1023148.html