Java Scriptスクリプトの実行

Java Scriptスクリプトの実行

ClearScriptは、C#やその他の. NET言語でスクリプトコードを実行するための. NETプラットフォーム用のオープンソースライブラリです。

最后更新 2023/03/14 22:03
沙漠尽头的狼
预计阅读 4 分钟
分类
.NET
标签
.NET C# JavaScript オープンソースソース C#とJSの相互運用。

ClearScriptは、C#やその他の. NET言語でスクリプトコードを実行するための. NETプラットフォーム用のオープンソースライブラリです。スクリプトとアプリケーションを統合するための便利で安全な方法を提供し、アプリケーションをスクリプトに公開して、より高度なカスタマイズとインタラクションを行うことができます。この記事では、C#でJava Scriptスクリプトを実行する方法、スクリプトと対話する方法、C#メソッドを呼び出す方法など、ClearScriptの使用方法と機能について詳しく説明します。

インストールと設定

ClearScriptはNuGetパッケージマネージャーからインストールできます。ClearScriptをインストールするには、Visual StudioでNuGet Package Managerコンソールを開き、次のコマンドを実行します。

Install-Package ClearScript

インストールが完了したら、ClearScript nugetパッケージのruntimesディレクトリをrunディレクトリにコピーして、プロジェクトでClearScriptライブラリを使用できるようにします。

JavaScriptスクリプトの実行

C#でJava Scriptスクリプトを実行するには、Java Scriptエンジンのインスタンスを作成し、スクリプトをそのインスタンスに渡す必要があります。以下は、簡単なJava Scriptプログラムを実行する方法を示す簡単な例です。

using var engine = new V8ScriptEngine();
engine.Execute("var a = 10; var b = 20; var c = a + b;");
var result = engine.Script.c;
Console.WriteLine(result); // 输出 30

この例では、engine "というV8ScriptEngineオブジェクトを作成し、そのExecuteメソッドを呼び出してJavaScriptコードを実行します。この場合、3つの変数(a、b、c)を定義し、それらを加算して結果を変数cに格納します。次に、engine.Scriptオブジェクトから変数cの値を取得し、コンソールに出力します。

スクリプトとの相互作用

Java Scriptスクリプトを実行するとき、C#オブジェクトをスクリプトに渡して、スクリプトがそれらのオブジェクトにアクセスできるようにすることができます。オブジェクトをスクリプトに渡すには、AddHostObjectメソッドを使用してJavaScriptエンジンにオブジェクトを追加します。C#オブジェクトをJava Scriptに渡す方法を示す簡単な例を以下に示します:

/// <summary>
/// Person类需要为Public,V8引擎才能正常访问
/// </summary>
public class Person
{
    public string? Name { get; set; }
    public int Age { get; set; }
}

/// <summary>
/// JS与C#交互
/// </summary>
static void InteractionBetweenJsAndCsharp()
{
    using var engine = new V8ScriptEngine();
    var person = new Person { Name = "沙漠尽头的狼", Age = 18 };
    engine.AddHostObject("person", person);
    engine.Execute("var c = person.Name + ' 才 ' + person.Age + ' 岁呀?';");
    var result = engine.Script.c;
    Console.WriteLine(result); // 沙漠尽头的狼 才 18 岁呀?
}

在这个示例中,我们创建了一个名为“person”的 C# 对象, 注意Person的定义访问修饰符为public,并使用 AddHostObject() 方法将其添加到 JavaScript 引擎中。然后,我们执行一个 JavaScript 程序,该程序拼接person对象的属性组成一个JS变量,最后C#访问JS变量输出到控制台(尝试在JS中使用console.log输出未成功,有知道原因的朋友请留言告知)。

C#メソッドの呼び出し

C#オブジェクトをJava Scriptに渡すだけでなく、Java ScriptでC#メソッドを呼び出すこともできます。JavaScriptでC#メソッドを呼び出すには、メソッドを含むクラスを作成し、AddHostObjectメソッドを使用してそのクラスをJavaScriptエンジンに追加します。Java ScriptでC#メソッドを呼び出す方法を示す簡単な例を以下に示します:

/// <summary>
/// JS调用C#的方法
/// </summary>
static void JsCallCSharpMethod()
{
    using var engine = new V8ScriptEngine();
    var calculator = new Calculator();
    engine.AddHostObject("calculator", calculator);
    engine.Execute("var result = calculator.Add(15, 20)");
    var result = engine.Script.result;
    Console.WriteLine(result); // 35
}

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

この例では、calculator "という名前のCalculatorオブジェクトを作成し、AddHostObjectメソッドを使用してJavaScriptエンジンに追加しています。次に、CalculatorオブジェクトのAddメソッドを呼び出してJava Scriptでプログラムを実行し、結果をJS変数に代入します。最後に、変数の値をC#で取得してコンソールに出力します。

マルチスレッドの利用

ClearScriptは複数のスレッドでJava Scriptエンジンを使用することもサポートします。Java Scriptエンジンを複数のスレッドで使用するには、複数のJava Scriptエンジンインスタンスを作成し、それぞれのスレッドを使用してスクリプトを実行する必要があります。Java Scriptエンジンを複数のスレッドで使用する方法を示す簡単な例を次に示します。

using System.Threading.Tasks;
using Microsoft.ClearScript.V8;

var engine1 = new V8ScriptEngine();
var engine2 = new V8ScriptEngine();

Task.Run(() =>
{
    engine1.Execute("var a = 'Hello from thread 1!'");
});

Task.Run(() =>
{
    engine2.Execute("var b = 'Hello from thread 2!'");
});

この例では、“engine1”と“engine2”という名前の2つのV 8 ScriptEngineオブジェクトを作成し、2つの別々のスレッドでそれぞれ2つのJava Scriptプログラムを実行しています。これらのプログラムはJS変数を定義する。

複数のスレッドでJava Scriptエンジンを使用する場合は、スレッドセーフの問題を避けるために、同じJava Scriptエンジンインスタンスに同時にアクセスすることは避けるべきです。

まとめまとめまとめ

この記事では、C#でJava Scriptスクリプトを実行する方法、スクリプトと対話する方法、C#メソッドの呼び出し方法、マルチスレッドの使用方法など、ClearScriptの使用方法と機能について説明します。ClearScriptは、スクリプトとアプリケーションを統合するための便利で安全な方法を提供し、アプリケーションをより高度なレベルのカスタマイズと相互作用のためにスクリプトに公開できます。ClearScriptを使用することで、アプリケーションに柔軟性と拡張性を追加し、アプリケーション内で動的なスクリプト実行機能を実装できます。

**参考文献 **

  • ClearScript Examples:https://microsoft.github.io/ClearScript/Examples/Examples.html
Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2026/04/22

バージョン別の. NETサポート状況(250 7 0 7更新)

仮想マシンとテストマシンを使用して、各バージョンのオペレーティングシステムの. NETサポートをテストします。オペレーティングシステムのインストール後、対応するランタイムを測定し、スターダストエージェントをパスとして実行できます。

继续阅读
同分类 / 同标签 2026/02/07

AOTの使用経験

プロジェクトの最初から、新しい機能が追加されたり、新しい構文が使用されたりするたびに、AOTリリーステストを行うという良い習慣を身につける必要があります。

继续阅读