你好,這裏是 Dotnet 工具箱,定期分享 Dotnet 有趣,實用的工具和元件,希望對您有用!
Jint 簡介
如果您想在您的 .NET 程式中使用 Javascript,那麽我推薦您使用 Jint。
Jint 是適用於 .NET 的 開源 Javascript 直譯器,功能強大,它可以在任何現代 .NET 平台上執行,因為它支持 .NET Standard 2.0 和 .NET 4.6.2 以及更高版本),包括最新的 .NET 6。
因為 Jint 既不生成任何 .NET 字節碼也不使用 DLR,所以在執行比較少的程式碼時,它的執行效率很快。
在 Nuget 包管理器中搜尋並安裝 Jint 即可,它沒有其他的一些依賴。
小試牛刀
執行 JS 運算式,並輸出結果。
using Jint;
var engine = new Jint.Engine();
var result = engine.Execute("1 + 2 + 3 + 4 + 5")
.GetCompletionValue();
Console.WriteLine(result);
// Output: 15
這裏,變量 x 設定為 3,並且 x * x 在 JavaScript 中進行計算,結果直接返回給 .NET 物件。
using Jint;
var square = new Engine()
.SetValue("x", 3) // 定義一個新變量 x
.Evaluate( "x * x") // 聲明運算式
.ToObject(); // 轉換為 .NET object
Console.WriteLine(square);
// Output: 9
你可以直接把 .NET 中的物件例項傳遞給 JS 並使用它,它的修改在 .NET 和 JS 中保持同步。
var p = new Person
{
Name = "Mickey Mouse"
};
var engine = new Engine()
.SetValue("p", p)
.Execute("p.Name = 'Minnie'");
Console.WriteLine(p.Name);
// Output: "Minnie"
你可以直接在 .NET 中執行在 JS 定義的函式。
var engine = new Engine();
varadd = engine
.Execute("function add(a, b) { return a + b; }")
.GetValue("add");
var result = engine.Invoke("add",1,2);
Console.WriteLine(result);
// Output: 3
您還可以使用 module 從多個指令碼檔中匯入和匯出變量。
var engine = new Engine(options =>
{
options.EnableModules(@"C:\Scripts");
})
var ns = engine.ImportModule("./my-module.js");
varvalue = ns.Get("value").AsString();
更多其他的高級用法,可以在 github 的 Jint 計畫中找到。