web-dev-qa-db-ja.com

JavaScriptエンジンを.NETに埋め込む

誰もがjsエンジンを.net環境に埋め込み、実際に統合しようとしたことがあるのか​​疑問に思っています。 spidermonkey-dotnetプロジェクトを見つけて、実際に使用できました(LOTの後に、かなり時代遅れで、まだ完成していないため、苦労と労力を費やしました)。この分野で経験のある人はいますか? SquirrelFish、V8などのエンジン.

MozillaのSpidermonkey(コアASP.NETアプリケーション内のカスタムコンポーネントのRailsのようなミニフレームワークにそれを使用する)に満足していないというわけではありませんが、オプションについてもう少し探求したいと思っています。コマンドラインソリューションは必要なものではありません。CLR以外に頼ることはできません。JavaScript/ C#オブジェクトとの間でメソッドを呼び出す必要があります。

// c# class
public class A
{
    public string Hello(string msg)
    {
        return msg + " whatewer";
    }
}

// js snippet
var a = new A();
console.log(a.Hello('Call me')); // i have a console.log implemented, don't worry, it's not a client-side code :)

明確にするために-私は実際にサーバーサイドjavascriptでアプリケーション自体をプログラムしようとはしていません。カスタムユーザーサブアプリケーションを作成するためにのみ使用されます(DSLのようなものとして見ることができます)。通常の人がC#よりもjsでプログラミングできるようにする方がはるかに簡単です(そして安全です)。

208
aprilchild

Javascript .NET を試してください。 GitHubでホストされています。元はCodePlexでホストされていました here

プロジェクトのディスカッション: http://javascriptdotnet.codeplex.com/discussions

Google V8を実装しています。 JavaScriptを使用して.NETコードから直接JavaScriptをコンパイルおよび実行し、JavaScriptコードでも使用されるCLIオブジェクトを提供できます。 JavaScriptからネイティブコードを生成します。

94
Michel Boissé

オープンソースのJavaScriptインタープリターJint( http://jint.codeplex.com )は、まさにあなたが探しているものを実行します。

編集:
プロジェクトは完全に書き直され、Githubの https://github.com/sebastienros/jint でホストされています

81

また、GitHubでホストされ、Ms-Plライセンスで公開されている Microsoft ClearScript にも興味があるかもしれません。

私はマイクロソフトのファンではありませんが、V8サポートにはJavascript.Netとほぼ同じ機能があり、さらに重要なことは、プロジェクトがまだ維持されていることを認めなければなりません。私に関する限り、デリゲートのサポートもSpidermonkey-dotnetの場合よりも機能します。

ps:JScriptとVBScriptもサポートしていますが、この古いものには興味がありませんでした。

ps:.NET 4.0および4.5+と互換性があります

49
JB.

ジュラシックもチェックアウトしてチューニングしている人は誰でも:

http://jurassic.codeplex.com/

編集:これはgithubに移動しました(一見アクティブに見えます)

https://github.com/paulbartrum/jurassic

37
bbqchickenrobot

IronJSを試すことができますが、開発は非常に進んでいますが、有望に見えます。 https://github.com/fholm/IronJS

8
Sergi Mansilla

私はあなたが何をしようとしているのかまだ不明ですが、JScript.NETは検討する価値があるかもしれませんが、 Managed JScript は、あなたのニーズにより適しているようです(JScript.NETよりもJavaScriptに似ています)。

個人的には、どういうわけかV8を統合するのはクールだと思っていましたが、ソースコードをダウンロードすることはできませんでした。私は実際にそれで何かをする時間があったらいいのに。

7
Jason Bunting

C#でChakraエンジンを使用できます。 msdnの記事は、次の方法を示しています。

http://code.msdn.Microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a1388

5
justin.m.chase

言語が問題ではない場合(サンドボックス化されたスクリプト言語)、 LUA for .NET があります。 .NETフレームワークのSilverlightバージョンもサンドボックス化されています。

5
Chris S

代わりに、はるかに単純なソリューションを思いつきました。

Javascriptを使用して.dllファイルを作成し、VS2013開発者コマンドプロンプトで使用可能なJavascriptコンパイラーを使用してコンパイルしました。

.dllを取得したら、それを\Supportフォルダーに追加し、Javascriptステートメントの評価に必要なプロジェクトでそれを参照します。

.dllを作成する詳細な手順:

  1. 次の内容のみを含むメモ帳でファイルを作成します。

    class EvalClass { function Evaluate(expression: String) { return eval(expression); } } 
    
  2. ファイルをC:\MyEval.jsとして保存します

  3. VS2005コマンドプロンプトを開きます(スタート、プログラム、VS2005、VS2005ツール)

  4. Cd\と入力してC:\にアクセスします

  5. タイプ

    jsc /t:library C:\MyEval.js
    
  6. MyEval.dllという名前の新しいファイルが作成されます。

  7. MyEval.dllをプロジェクトにコピーして参照します(Microsoft.Jscript.dllも参照します)。

  8. その後、次のように呼び出すことができるはずです。

    Dim jScriptEvaluator As New EvalClass
    Dim objResult As Object
    objResult = jScriptEvaluator.Evaluate(“1==1 && 2==2”)
    

objResultはTrueです。

5
sinanguler

Script# は、C#をjsにコンパイルし、ASP.Netチームの頭脳です。 Rick Strahl には、式評価のランタイムエンジンとしてjsを埋め込むことに関するいくつかの投稿もあります。

4
David Robbins

バージョン0.3.1のcodeplex( http://javascriptdotnet.codeplex.com/ )でJavascript .NETを探してみてください。

サンプルコードをご覧ください。

// Initialize the context
JavascriptContext context = new JavascriptContext();

// Setting the externals parameters of the context
context.SetParameter("console", new SystemConsole());
context.SetParameter("message", "Hello World !");
context.SetParameter("number", 1);

// Running the script
context.Run("var i; for (i = 0; i < 5; i++) console.Print(message + ' (' + i + ')'); number += i;");

// Getting a parameter
Console.WriteLine("number: " + context.GetParameter("number"));
4
Deacon Frost

試したところです。Net用のRemObjectsスクリプト

動作しますが、var a=A.createA();構文の代わりにJavaScriptから静的ファクトリー(var a=new A())を使用する必要がありました。 (ExposeType関数は静的変数のみを公開します!)多くのドキュメントとソースはDelphi Prismで書かれていますが、これは私にとってもRedGate Reflectorにとっても珍しいことです。

そのため、使いやすくセットアップも簡単ですが、高度なシナリオにはあまり役立ちません。

また、アセンブリをディレクトリにドロップするだけでなく、何かをインストールする必要があることは、私にとってマイナスです...

4
sanosdole

スクリプトの拡張性をあらゆるものに追加するマイクロソフトの文書化された方法がIActiveScriptです。 anyt .NETアプリ内からIActiveScriptを使用して、スクリプトロジックを呼び出すことができます。ロジックは、スクリプトコンテキストに配置した.NETオブジェクトでパーティできます。

この答えは、それを行うアプリケーションにコードを提供します:

2
Cheeso

ActiveXスクリプト の実装があります。C#のエンジンホストは、ここで入手できます。 C#によるJSの解析と実行

ネイティブの32ビットまたは64ビットプロセスで、C#から直接Javascript(またはVBScript)を使用できます。完全なソースは、〜500行のC#コードです。インストールされたJScript(またはVBScript)エンジンDLLへの暗黙的な依存関係のみがあります。

たとえば、次のコード:

Console.WriteLine(ScriptEngine.Eval("jscript", "1+2/3"));

1.66666666666667が表示されます

2
Simon Mourier

また、Internet ExplorerのChakraエンジンを使用する MsieJavaScriptEngine もあります。

2
Simon

古いスレッドを開いていることは知っていますが、smnet(spidermonkey-dotnet)で多くの作業を行っています。近年では。主な開発の焦点は、.netオブジェクトをspidermonkeyエンジンにシームレスに埋め込むことです。 js値から.netオブジェクトへのさまざまな変換をサポートします。デリゲートやイベントを含むそれらのいくつか。

いくつかの着実な開発があるので、今チェックする価値があるかもしれないと言ってください:)。バグ修正と新機能でSVNリポジトリを最新の状態に保ちます。ソースおよびプロジェクトソリューションファイルは、ダウンロード時に正常にビルドされるように構成されています。使用中に問題が発生した場合は、気軽にディスカッションを開いてください。

私はマネージドjavascriptソリューションを持ちたいという願望を理解していますが、私が使用したすべてのマネージドjavascriptでは、堅牢で使いやすい主要な機能がすべて不足しています。私自身、IronJSが少し成熟するのを待っています。待っている間、私はspidermonkey-dotnet =)で遊んで楽しんでいます

spidermonkey-dotnetプロジェクトおよびダウンロードページ

編集:ドキュメントのwikiページを今日の午後に作成しました。

1
SilverX

ReoScript を試してください。C#で実装されたオープンソースのJavaScriptインタープリターです。

ReoScriptは、アプリケーションがJavaScriptを実行できるようにします。 SetVariable、Function Extension、CLR Type、.Net Event Bindingなどを使用したさまざまな拡張方法があります。

こんにちは世界:

ScriptRunningMachine srm = new ScriptRunningMachine();
srm.Run(" alert('hello world!'); ");

そして、winformを作成して表示するスクリプトの例を次に示します。

import System.Windows.Forms.*;        // import namespace

var f = new Form();                   // create form
f.click = function() { f.close(); };  // close when user clicked on form

f.show();                             // show 
1
Jing

Javaで記述されたMozilla JavascriptエンジンであるRhinoを使用し、IKVMで使用できます。以下にいくつかの手順を示します。

手順: https://www.codeproject.com/Articles/41792/Embedding-JavaScript-into-C-with-Rhino-and-IKVM

0
luiseduardohd

すべての主要なオープンソースJSエンジン(JavaScriptCore、SpiderMonkey、V8、およびKJS)は埋め込みAPIを提供すると考えています。私が実際に直接知っているのは、純粋なC APIを提供するJavaScriptCore(SquirrelFishが存在するJSエンジンの名前)だけです。メモリが機能する場合(.NETを使用してからしばらく経ちました).NETは、C APIでのリンクをかなり良好にサポートしています。

他のエンジンのAPIがどのようなものかは正直わかりませんが、それらがすべて提供していることは知っています。

ただし、JSCは実際にOSに同梱されているが、OSはMacOSであるため、これらの他のすべてのエンジンでアプリに含める必要があるため、目的によってはJScript.NETが最適かもしれません。

0
olliej

V8.NET は、ブロック上の新しい子供(2013年4月現在)であり、ネイティブV8エンジン機能をより密接にラップします。これにより、実装をより詳細に制御できます。

0
James Wilkins

JSCRIPT.NETを使用して、jsのライブラリー(dll)を取得します。次に、.NETアプリケーションでこのdllを参照します。完了!

0
Nilav Ghosh