誰もが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でプログラミングできるようにする方がはるかに簡単です(そして安全です)。
Javascript .NET を試してください。 GitHubでホストされています。元はCodePlexでホストされていました here )
プロジェクトのディスカッション: http://javascriptdotnet.codeplex.com/discussions
Google V8を実装しています。 JavaScriptを使用して.NETコードから直接JavaScriptをコンパイルおよび実行し、JavaScriptコードでも使用されるCLIオブジェクトを提供できます。 JavaScriptからネイティブコードを生成します。
オープンソースのJavaScriptインタープリターJint( http://jint.codeplex.com )は、まさにあなたが探しているものを実行します。
編集:
プロジェクトは完全に書き直され、Githubの https://github.com/sebastienros/jint でホストされています
また、GitHubでホストされ、Ms-Plライセンスで公開されている Microsoft ClearScript にも興味があるかもしれません。
私はマイクロソフトのファンではありませんが、V8サポートにはJavascript.Netとほぼ同じ機能があり、さらに重要なことは、プロジェクトがまだ維持されていることを認めなければなりません。私に関する限り、デリゲートのサポートもSpidermonkey-dotnetの場合よりも機能します。
ps:JScriptとVBScriptもサポートしていますが、この古いものには興味がありませんでした。
ps:.NET 4.0および4.5+と互換性があります
ジュラシックもチェックアウトしてチューニングしている人は誰でも:
編集:これはgithubに移動しました(一見アクティブに見えます)
IronJSを試すことができますが、開発は非常に進んでいますが、有望に見えます。 https://github.com/fholm/IronJS
私はあなたが何をしようとしているのかまだ不明ですが、JScript.NETは検討する価値があるかもしれませんが、 Managed JScript は、あなたのニーズにより適しているようです(JScript.NETよりもJavaScriptに似ています)。
個人的には、どういうわけかV8を統合するのはクールだと思っていましたが、ソースコードをダウンロードすることはできませんでした。私は実際にそれで何かをする時間があったらいいのに。
C#でChakraエンジンを使用できます。 msdnの記事は、次の方法を示しています。
http://code.msdn.Microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a1388
言語が問題ではない場合(サンドボックス化されたスクリプト言語)、 LUA for .NET があります。 .NETフレームワークのSilverlightバージョンもサンドボックス化されています。
代わりに、はるかに単純なソリューションを思いつきました。
Javascriptを使用して.dll
ファイルを作成し、VS2013開発者コマンドプロンプトで使用可能なJavascriptコンパイラーを使用してコンパイルしました。
.dll
を取得したら、それを\Support
フォルダーに追加し、Javascriptステートメントの評価に必要なプロジェクトでそれを参照します。
.dll
を作成する詳細な手順:
次の内容のみを含むメモ帳でファイルを作成します。
class EvalClass { function Evaluate(expression: String) { return eval(expression); } }
ファイルをC:\MyEval.js
として保存します
VS2005コマンドプロンプトを開きます(スタート、プログラム、VS2005、VS2005ツール)
Cd\
と入力してC:\
にアクセスします
タイプ
jsc /t:library C:\MyEval.js
MyEval.dll
という名前の新しいファイルが作成されます。
MyEval.dll
をプロジェクトにコピーして参照します(Microsoft.Jscript.dll
も参照します)。
その後、次のように呼び出すことができるはずです。
Dim jScriptEvaluator As New EvalClass
Dim objResult As Object
objResult = jScriptEvaluator.Evaluate(“1==1 && 2==2”)
objResultはTrue
です。
Script# は、C#をjsにコンパイルし、ASP.Netチームの頭脳です。 Rick Strahl には、式評価のランタイムエンジンとしてjsを埋め込むことに関するいくつかの投稿もあります。
バージョン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"));
試したところです。Net用のRemObjectsスクリプト。
動作しますが、var a=A.createA();
構文の代わりにJavaScriptから静的ファクトリー(var a=new A()
)を使用する必要がありました。 (ExposeType関数は静的変数のみを公開します!)多くのドキュメントとソースはDelphi Prismで書かれていますが、これは私にとってもRedGate Reflectorにとっても珍しいことです。
そのため、使いやすくセットアップも簡単ですが、高度なシナリオにはあまり役立ちません。
また、アセンブリをディレクトリにドロップするだけでなく、何かをインストールする必要があることは、私にとってマイナスです...
スクリプトの拡張性をあらゆるものに追加するマイクロソフトの文書化された方法がIActiveScriptです。 anyt .NETアプリ内からIActiveScriptを使用して、スクリプトロジックを呼び出すことができます。ロジックは、スクリプトコンテキストに配置した.NETオブジェクトでパーティできます。
この答えは、それを行うアプリケーションにコードを提供します:
ActiveXスクリプト の実装があります。C#のエンジンホストは、ここで入手できます。 C#によるJSの解析と実行
ネイティブの32ビットまたは64ビットプロセスで、C#から直接Javascript(またはVBScript)を使用できます。完全なソースは、〜500行のC#コードです。インストールされたJScript(またはVBScript)エンジンDLLへの暗黙的な依存関係のみがあります。
たとえば、次のコード:
Console.WriteLine(ScriptEngine.Eval("jscript", "1+2/3"));
1.66666666666667が表示されます
また、Internet ExplorerのChakraエンジンを使用する MsieJavaScriptEngine もあります。
古いスレッドを開いていることは知っていますが、smnet(spidermonkey-dotnet)で多くの作業を行っています。近年では。主な開発の焦点は、.netオブジェクトをspidermonkeyエンジンにシームレスに埋め込むことです。 js値から.netオブジェクトへのさまざまな変換をサポートします。デリゲートやイベントを含むそれらのいくつか。
いくつかの着実な開発があるので、今チェックする価値があるかもしれないと言ってください:)。バグ修正と新機能でSVNリポジトリを最新の状態に保ちます。ソースおよびプロジェクトソリューションファイルは、ダウンロード時に正常にビルドされるように構成されています。使用中に問題が発生した場合は、気軽にディスカッションを開いてください。
私はマネージドjavascriptソリューションを持ちたいという願望を理解していますが、私が使用したすべてのマネージドjavascriptでは、堅牢で使いやすい主要な機能がすべて不足しています。私自身、IronJSが少し成熟するのを待っています。待っている間、私はspidermonkey-dotnet =)で遊んで楽しんでいます
spidermonkey-dotnetプロジェクトおよびダウンロードページ
編集:ドキュメントのwikiページを今日の午後に作成しました。
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
Javaで記述されたMozilla JavascriptエンジンであるRhinoを使用し、IKVMで使用できます。以下にいくつかの手順を示します。
手順: https://www.codeproject.com/Articles/41792/Embedding-JavaScript-into-C-with-Rhino-and-IKVM
すべての主要なオープンソースJSエンジン(JavaScriptCore、SpiderMonkey、V8、およびKJS)は埋め込みAPIを提供すると考えています。私が実際に直接知っているのは、純粋なC APIを提供するJavaScriptCore(SquirrelFishが存在するJSエンジンの名前)だけです。メモリが機能する場合(.NETを使用してからしばらく経ちました).NETは、C APIでのリンクをかなり良好にサポートしています。
他のエンジンのAPIがどのようなものかは正直わかりませんが、それらがすべて提供していることは知っています。
ただし、JSCは実際にOSに同梱されているが、OSはMacOSであるため、これらの他のすべてのエンジンでアプリに含める必要があるため、目的によってはJScript.NETが最適かもしれません。
V8.NET は、ブロック上の新しい子供(2013年4月現在)であり、ネイティブV8エンジン機能をより密接にラップします。これにより、実装をより詳細に制御できます。
JSCRIPT.NETを使用して、jsのライブラリー(dll)を取得します。次に、.NETアプリケーションでこのdllを参照します。完了!