20

C#アセンブリ内からJavaScriptコードを実行し、JavaScriptコードの結果を呼び出し元のC#コードに返したいのですが。

私がやろうとしていないことを定義する方が簡単です。

  • コードビハインドからWebページでJavaScript関数を呼び出そうとはしていません。

  • WebBrowserコントロールを読み込もうとはしていません。

  • JavaScriptにサーバーへのAJAX呼び出しを実行させたくありません。

私がやりたいのは、JavaScriptで単体テストを記述し、単体テストでJSONを出力することです。プレーンテキストでも問題ありません。次に、JSを含むファイルをロードし、JS単体テストを実行し、結果をスクラップ/ロードし、ビルド後のタスク中に詳細を含む合格/不合格を返すことができる汎用C#クラス/実行可能ファイルが必要です。

古いActiveXScriptControlを使用することは可能だと思いますが、SilverLight、DLR、またはまだ出荷されていないものを使用せずにこれを行うための.NETの方法があるはずです。誰かアイデアはありますか?

更新:BradAbramsブログから

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関数の単体テストがあります。現在、ビルドプロセス中に、手動でWebページをロードし、ボタンをクリックして、すべてのJavaScript単体テストに合格するようにする必要があります。自動化されたC#単体テストが実行されるときに、ビルド後のプロセスでテストを実行し、C#単体テストと一緒に成功/失敗を報告し、ビルドするかどうかの指標として使用できるようにしたいと思います。は壊れてます。

4

6 に答える 6

7

コードは自明なので、それを投稿します。

<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);
    }
}
于 2008-09-15T22:59:54.033 に答える
2

Microsoft Javascriptエンジンを使用して、C#からJavaScriptコードを評価できます。

更新:これはVS2008で廃止されました

于 2008-09-15T22:53:52.147 に答える
1

JSUnit サーバーを使用して Nant 内から JSUnit を実行できます。これは Java で記述されており、Nant タスクはありませんが、コマンド プロンプトから実行できます。結果は XML としてログに記録され、ビルド レポートと統合できます。処理する。これは Nunit の結果の一部ではなく、追加のレポートです。これらのテストのいずれかが失敗した場合、ビルドは失敗します。CC.Net を使用して、まさにそれを行っています。

于 2008-09-16T03:44:17.673 に答える
0

JSUnitを使用してテストを記述し、WatiN テストラッパーを使用してC#でテストを実行し、JSUnitの結果に基づいて合格または不合格にする方が簡単でしょうか。

しかし、それは確かに余分なステップです。

MBUnitまたはWatiNの次期バージョンには、JSUnitテストフィクスチャを処理する機能が組み込まれることをどこかで読んだと思います。どこで読んだか思い出せたら…

于 2008-09-15T22:56:28.083 に答える
0

現在、これを行うための.NET固有の方法はわかりません...まあ、まだJScript.NETはありますが、実行する必要のあるJSとはおそらく互換性がありません:)

明らかに、将来はDLR用の.NET JScript実装になるでしょう...いつか(うまくいけば)。

そのため、おそらく古いActiveX JScriptエンジンを実行したままになります。これは、.NETから実行できます(少し醜い面ですが、過去に実行したことがあります)。

于 2008-09-15T22:56:57.990 に答える
0

ブラウザのコンテキストでコードを実行していないのに、なぜテストを Javascript で書く必要があるのでしょうか? ここで達成しようとしていることの全体像を理解するのは困難です。

于 2008-09-15T23:22:41.513 に答える