35 votes

Référencement du moteur V8 de Google à partir d'une application .NET

Je suis en train de construire un .NET 3.5 application, et la nécessité d'évaluer code JS sur le serveur - fondamentalement, un utilisateur a fourni ensemble de règles qui peuvent travailler au sein d'un navigateur ou sur le serveur. Géré JS n'est pas une option, parce que le code JS serait fourni au moment de l'exécution. Aptana est Jaxer est pas non plus une option. J'ai donc été à la recherche dans l'utilisation d'une version du moteur V8 dans mon application.

J'ai construit la source avec succès dans une DLL, mais cette DLL n'est pas une bibliothèque gérée et n'est pas COM. V8 est juste du C++.

Toutes les idées sur la façon de l'interopérabilité avec ce type de DLL en C#? Aussi, je suis ouvert à d'autres suggestions pour SpiderMonkey ou un autre moteur JS.

Merci à l'avance.

Mise à JOUR:

J'ai été en mesure d'utiliser de Ryan solution. Je viens de mettre à jour les références à la construction de la plus récente à partir du tronc. Il a travaillé beaucoup. Merci Ryan.

34voto

Ryan Cook Points 5613

Je me rends compte que cela peut ne pas être une réponse précise à votre question, mais j'ai pensé que je voudrais mettre mon 2 cents comme je doute que beaucoup de gens ont essayé ce.

Je l'ai eu à travailler en créé un wrapper géré en mode mixte C++. Il y a d'autres façons de le faire, mais je vais essayer de faire un wrapper qui pourrait être utilisée à partir de tout .Net de la langue.

L'obtention de la lib pour compiler de manière telle qu'elle puisse être incluse dans un mode mixte de projet était un peu un défi. J'ai dû modifier la bibliothèque d'exécution (dans le fichier SConstruct) utilisé pour /MD et /MDd, de sorte qu'il serait compatible avec le commutateur /clr.

Pour l'instant j'ai que de simples scripts en cours d'exécution comme je n'ai pas mis en œuvre des rappels, de la coutume, des méthodes, des objets et autres.

Voici un petit échantillon de ce que l'utilisation ressemble pour l'un de mes test d'applications:

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

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

Il s'exécute plus compliqué scripts comme un encoder en base64 très bien. Mais pour l'instant je ne peux qu'ajouter des éléments à partir du c++ côté.

Je suis disposé à fournir plus d'informations + code si quelqu'un est intéressé que je ne peut pas toujours choisir ce projet de retour. Mais, j'ai peur qu'elle voie à beaucoup de code pour aller dans un autre post ici, donc nous devons trouver un autre moyen comme google code ou codePlex.

Edit:


OK, j'ai téléchargé le code. Je dois mettre un avertissement sur ce point: Le projet est très tôt et je suis un amateur en C++, au mieux, afin de ne pas obtenir vos espoirs pour beaucoup. Aussi, ce projet a été créé/fait juste après le chrome a été libéré pour la version v8 inclus peut-être vieux.

Cela dit, ici, il est: http://ryanscook.com/Files/V8-DotNet.zip (21.5 MB)

Dans le paquet vous trouverez les éléments suivants d'intérêt:

V8Net-Bibliothèque\V8.Net\V8.Net.la sln -Ce est la solution qui a le géré Wrapper C++ proj et une console C# app pour les tests.

Dépendances\V8 - C'est mon V8 code que j'ai utilisé pour construire le V8 lib.

Espérons que cela aide!

18voto

Michel Boissé Points 181

Vous pouvez essayer Javascript .NET:

http://javascriptdotnet.codeplex.com/

Il vous permet de créer un contexte V8 à partir de .NET et d'y enregistrer des objets CLI afin que vous puissiez les manipuler et appeler des membres à partir du code Javascript. Il compile le Javascript au moment de l'exécution.

Vérifiez-le.

13voto

Shaun Points 131

Découvrez v8sharp . Il prend en charge l'exécution de JS dans une application .NET. Il vous permet également d’enregistrer des types .NET avec le moteur v8 afin que votre code JS puisse interagir avec votre code .NET. Je suis en train d'ajouter un support pour le support de fonction de raccordement / délégué.

1voto

Orion Edwards Points 54939

Microsoft construit un vrai javascript - pas "JScript" - d'exécution (avec IronPython, IronRuby et VB10) sur le CLR utilisant le DLR, mais je ne trouve aucun téléchargement ni contenu pour celui-ci. Peut-être que cela arrivera avec C # 4?

0voto

D'après ce que j'entends dire, la compilation avec IJW (Managed C ++) devrait fonctionner - mais je me trompe peut-être vraiment, je n'ai jamais touché à MC ++.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X