221

jsエンジンを.net環境に埋め込んで実際に統合しようとした人がいるかどうか疑問に思っています. 私は Spidermonkey- dotnetプロジェクトを見つけて実際に使用することができました (かなり時代遅れで完全に完成していないため、多くの苦痛と努力の後)。この分野で経験のある人はいますか?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 でプログラミングできるようにする方が、はるかに簡単 (かつ安全) です。

4

21 に答える 21

99

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

プロジェクトの議論: http://javascriptdotnet.codeplex.com/discussions

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

于 2010-07-05T22:10:03.777 に答える
90

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

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

于 2009-10-26T12:30:36.957 に答える
58

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

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

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

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

于 2013-06-14T14:18:36.207 に答える
40

チューンインしたばかりの人は、ジュラシックもチェックしてください。

http://jurassic.codeplex.com/

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

https://github.com/paulbartrum/jurassic

于 2012-01-09T22:16:45.713 に答える
8

あなたはironJSを試すことができます.それは重い開発中ですが有望に見えます. https://github.com/fholm/IronJS

于 2011-01-23T10:40:27.643 に答える
7

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

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

于 2008-10-05T23:01:45.353 に答える
6

代わりに、はるかに簡単な解決策を思いつきました。

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

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

を作成する詳細な手順.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.

于 2015-07-21T20:24:07.267 に答える
5

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

于 2009-01-22T14:48:46.157 に答える
5

C# で Chakra エンジンを使用できます。以下は、msdn に関する記事で、その方法を示しています。

http://code.msdn.microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a13880

于 2014-01-16T16:22:25.707 に答える
5

コードプレックス ( http://javascriptdotnet.codeplex.com/ ) でJavascript .NET を調べてみてください。バージョン 0.3.1 には、きっとあなたの興味を引きそうな素敵な新機能がいくつかあります。

サンプルコードをチェックしてください:

// 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"));
于 2010-08-24T20:27:13.123 に答える
4

RemObjects Script for .Net を試しました。

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

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

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

于 2011-07-05T20:41:02.607 に答える
2

Internet Explorers Chakra エンジンを使用するMsieJavaScriptEngineもあります。

于 2014-02-12T02:09:00.930 に答える
2

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

この回答は、コードを使用してそれを行うアプリケーションを提供します。

于 2011-09-15T16:10:51.027 に答える
2

C# でのActiveX Scripting Engine Hostの実装がここにあります: parse and execute JS by C#

ネイティブの 32 ビットまたは 64 ビット プロセスで、Javascript (または VBScript) を C# から直接使用できます。完全なソースは、約 500 行の C# コードです。インストールされている JScript (または VBScript) エンジン DLL に暗黙的に依存するだけです。

たとえば、次のコード:

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

1.66666666666667 が表示されます

于 2011-12-02T17:44:56.113 に答える
1

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

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 
于 2013-02-12T08:19:23.317 に答える
1

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

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

とはいえ、目的によっては、JScript.NET が最適な場合があります。これらの他のすべてのエンジンでは、実際に OS に同梱されているのは JSC だけですが、その OS は MacOS であるため、これらの他のすべてのエンジンをアプリに含める必要があるためです:D

于 2008-10-06T03:57:52.700 に答える
1

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

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

マネージ JavaScript ソリューションが必要なのは理解できますが、私が使用したすべてのマネージ JavaScript には、堅牢で使いやすいものにするためのいくつかの重要な機能が欠けています。私自身、IronJS が少し成熟するのを待っています。待っている間、spidermonkey-dotnet で遊んでいます =)

Spidermonkey-dotnet プロジェクトとダウンロード ページ

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

于 2011-07-27T04:38:13.647 に答える
0

JSCRIPT.NETを使用して、jsのlibrary(dll)を取得します。次に、.NETアプリケーションでこのdllを参照すると、そこにいます。終わり!

于 2009-03-06T20:25:47.327 に答える
-5

ASP.Net MVC4 RazorViewエンジンで可能になりました。コードは次のようになります。

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

// js snippet
<script type="text/javascript">
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 :)
</script>

MVC4やRazorその他の Web アプリケーションだけでなく、オフラインのデスクトップ アプリケーションでも使用できます。

于 2012-08-23T17:51:52.103 に答える