[英]Execute JavaScript from within a C# assembly
我想從 C# 程序集中執行 JavaScript 代碼,並將 JavaScript 代碼的結果返回給調用 JavaScript 代碼。
定義我不想做的事情更容易:
我不是想從我的代碼后面的 web 頁面上調用 JavaScript function 頁面。
我不想加載 WebBrowser 控件。
我不想讓 JavaScript 對服務器執行 AJAX 調用。
我想做的是在 JavaScript 中編寫單元測試,然后對 output JSON 進行單元測試,即使是純文本也可以。 然后我想要一個通用的 C# 類/可執行文件,它可以加載包含 JS 的文件,運行 JS 單元測試,廢棄/加載結果,並在構建后任務期間返回帶有詳細信息的通過/失敗。
我認為使用舊的 ActiveX ScriptControl 是可能的,但似乎應該有一種 .NET 方式來做到這一點,而不使用 SilverLight、DLR 或其他任何尚未發貨的東西。 有人有想法么?
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 函數進行了單元測試。 現在在我們的構建過程中,我們必須手動加載 web 頁面並單擊按鈕以確保所有 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);
}
}
您可以使用 Microsoft Javascript 引擎來評估 C# 中的 JavaScript 代碼
更新:這在 VS 2008 中已過時
您可以使用 JSUnit 服務器從 Nant 內部運行 JSUnit,它是用 java 編寫的,沒有 Nant 任務,但您可以從命令提示符運行它,結果記錄為 XML,您可以將它們與構建報告集成過程。 這不是 Nunit 結果的一部分,而是額外的報告。 如果其中任何一個測試失敗,我們就會使構建失敗。 我們正在使用 CC.Net 來做這件事。
我現在不知道有任何 .NET 特定的方式來執行此操作......嗯,仍然有 JScript.NET,但這可能與您需要執行的任何 JS 都不兼容:)
顯然,未來將是用於 DLR 的 .NET JScript 實現……總有一天(希望如此)。
所以這可能會留下運行舊的 ActiveX JScript 引擎,這當然可以從 .NET 這樣做(我過去做過,雖然它有點丑陋。)。
如果您不在瀏覽器上下文中執行代碼,為什么需要在 Javascript 中編寫測試? 很難理解你在這里想要完成的事情的大局。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.