35

私は .NET 3.5 アプリケーションを構築しており、サーバー上で JS コードを評価する必要があります。基本的には、ブラウザー内またはサーバー上で機能するユーザー提供のルール セットです。JS コードは実行時に提供されるため、マネージ JS はオプションではありません。Aptana の Jaxer もオプションではありません。そのため、アプリ内で V8 エンジンのビルドを使用することを検討していました。

ソースを DLL に正常にビルドしましたが、その DLL はマネージ ライブラリではなく、COM でもありません。V8 は単純な C++ です。

C# でこのタイプの DLL と相互運用する方法についてのアイデアはありますか? また、SpiderMonkey や別の JS エンジンに関するその他の提案も受け付けています。

前もって感謝します。

アップデート:

Ryanのソリューションを使用できました。トランクからの最新のビルドへの参照を更新しました。それはうまくいきました。ありがとうライアン。

4

9 に答える 9

34

これはあなたの質問に対する正確な答えではないかもしれませんが、多くの人がこれを試したことがあるとは思えないので、2セントの価値があると思いました.

混合モード C++ を使用してマネージ ラッパーを作成することで動作するようになりました。他にも方法はありますが、任意の .NET 言語から使用できる完全なラッパーを作成しようとしました。

混合モードのプロジェクトに含めることができるように lib をコンパイルするのは、少し大変でした。/MD および /MDd に使用されるランタイム ライブラリ (SConstruct ファイル内) を変更して、/clr スイッチと互換性を持たせる必要がありました。

これまでのところ、コールバック、カスタム メソッド、オブジェクトなどを実装していないため、単純なスクリプトしか実行していません。

以下は、私のテスト アプリの 1 つの使用方法の簡単なサンプルです。

V8DotNet.Shell shell = new V8DotNet.Shell();

shell.ExecuteScript(@"print('V8 version is: ' + version());");

base64 エンコーダーのような複雑なスクリプトも実行できます。ただし、今のところ、C++ 側からのみカスタム項目を追加できます。

このプロジェクトを取り戻すことはできないかもしれないので、誰かが興味を持っている場合は、より多くの情報とコードを喜んで提供します。しかし、ここに投稿するには多くのコードが必要なので、Google コードや codePlex などの他の媒体を見つける必要があります。

編集:


OK、コードをアップロードしました。これについて免責事項を言わなければなりません:プロジェクトは非常に初期の段階であり、私はせいぜい C++ のアマチュアであるため、あまり期待しないでください。また、このプロジェクトは chrome がリリースされた直後に作成/実行されたため、含まれている v8 のバージョンが古い可能性があります。

そうは言っても、ここにあります: http://ryanscook.com/Files/V8-DotNet.zip (21.5 MB)

パッケージには、次の興味深いアイテムが含まれています。

V8Net-Library\V8.Net\V8.Net.sln -これは、マネージド C++ ラッパー プロジェクトとテスト用の C# コンソール アプリを含むソリューションです。

Dependencies\V8 -これは、V8 ライブラリをビルドするために使用した V8 コードです。

それが役に立てば幸い!

于 2008-12-10T19:29:02.807 に答える
18

Javascript .NET を試すことができます。

http://javascriptdotnet.codeplex.com/

.NET から V8 コンテキストを作成し、それに CLI オブジェクトを登録して、Javascript コードからそれらを操作し、メンバーを呼び出すことができます。実行時に Javascript をコンパイルします。

見てみな。

于 2010-07-05T22:34:49.377 に答える
13

v8sharpをチェックしてください。.NETアプリケーション内でのJSの実行をサポートします。また、.NETタイプをv8エンジンに登録して、JSコードが.NETコードと相互作用できるようにすることもできます。フック機能/デリゲートサポートのサポートを追加中です。

于 2010-06-30T02:54:44.673 に答える
1

Microsoftは、DLR を使用して CLR 上で (IronPython、IronRuby、および VB10 とともに) ランタイムを (IronPython、IronRuby、および VB10 とともに) 本物の JavaScript (「JScript」ではありません) を構築していますが、ダウンロードやコンテンツが見つかりません。おそらく、これは C# 4 で実現するでしょうか?

于 2008-12-10T20:13:14.530 に答える
1

V8.NET も試すことができます。

https://www.nuget.org/packages/V8.Net/

他の多くのラッパーよりも低いレベルでコードを V8 と簡単に統合できます。また、.Net 4.6.1+ および .Net Standard 2.0+ (.Net Core) もサポートしています。

于 2013-06-01T19:50:28.207 に答える
0

IJW(Managed C ++)でコンパイルすると、うまくいくはずですが、本当に間違っているかもしれません。MC++に触れたことはありません。

于 2008-12-10T19:48:16.530 に答える
0

ガタピアはjs.netjishに置き換えたと思います

于 2012-05-05T17:59:18.230 に答える