Ich frage mich nur, ob jemals jemand versucht hat, eine js-Engine in die .net-Umgebung einzubetten und tatsächlich zu integrieren. Ich konnte finden und tatsächlich nutzt (nach einer LOT von Schmerz und Mühe, da es ziemlich veraltet ist und nicht ganz fertig) Spidermonkey-Dotnet - Projekt. Jemand mit Erfahrung in diesem Bereich? Motoren wie SquirrelFish, V8 ..
Nicht, dass ich mit Mozillas Spidermonkey (der es für Rails-ähnliche Miniframeworks für benutzerdefinierte Komponenten in der ASP.NET-Kernanwendung verwendet) nicht zufrieden bin, aber ich würde trotzdem gerne etwas weiter mit den Optionen arbeiten. Die Befehlszeilenlösungen sind nicht das, was ich brauche. Ich kann mich nur auf CLR verlassen. Ich muss Methoden von / zu JavaScript / C # -Objekten aufrufen.
// 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 :)
Nur zur Klarstellung: Ich versuche nicht, die Anwendung selbst in serverseitigem Javascript zu programmieren . Es wird ausschließlich zum Schreiben von benutzerdefinierten Benutzerunteranwendungen verwendet (kann als eine Art DSL angesehen werden). Es ist viel einfacher (und sicherer), normalen Leuten das Programmieren in js als C # zu erlauben.
quelle
Der Open-Source-JavaScript-Interpreter Jint ( http://jint.codeplex.com ) macht genau das, wonach Sie suchen.
Bearbeiten:
Das Projekt wurde komplett neu geschrieben und wird jetzt auf Github unter https://github.com/sebastienros/jint gehostet
quelle
Möglicherweise interessieren Sie sich auch für Microsoft ClearScript , das auf GitHub gehostet und unter der Ms-Pl-Lizenz veröffentlicht wird.
Ich bin kein Microsoft-Fan, aber ich muss zugeben, dass die V8-Unterstützung ungefähr die gleichen Funktionen wie Javascript.Net hat, und was noch wichtiger ist, das Projekt wird weiterhin beibehalten. Für mich funktioniert die Unterstützung für Delegierte auch besser als mit Spidermonkey-dotnet.
ps: Es unterstützt auch JScript und VBScript, aber dieses alte Zeug hat uns nicht interessiert.
ps: Es ist kompatibel mit .NET 4.0 und 4.5+
quelle
Jeder, der sich gerade einschaltet, schaut sich auch Jurassic an:
http://jurassic.codeplex.com/
edit: dies ist zu github übergegangen (und scheint auf den ersten blick aktiv zu sein)
https://github.com/paulbartrum/jurassic
quelle
Sie können ironJS ausprobieren, sieht vielversprechend aus, obwohl es sich in einer starken Entwicklung befindet. https://github.com/fholm/IronJS
quelle
Ich denke, ich bin immer noch unklar, was Sie versuchen, aber JScript.NET könnte einen Blick wert sein, obwohl Managed JScript für Ihre Anforderungen besser geeignet zu sein scheint (es ähnelt eher JavaScript als JScript.NET). .
Persönlich dachte ich, es wäre cool, V8 irgendwie zu integrieren, aber ich bin nicht daran vorbei gekommen, den Quellcode herunterzuladen. Ich wünschte, ich hätte die Zeit, etwas damit zu tun.
quelle
Wenn die Sprache kein Problem darstellt (ein Sandbox-Skript), gibt es LUA für .NET . Die Silverlight-Version des .NET-Frameworks ist ebenfalls afaik sandboxed.
quelle
Hey, schauen Sie nach Javascript .NET auf Codeplex ( http://javascriptdotnet.codeplex.com/ ) mit der Version 0.3.1. Es gibt einige ziemlich süße neue Funktionen, die Sie wahrscheinlich interessieren werden.
Schauen Sie sich einen Beispielcode an:
quelle
Sie können die Chakra-Engine in C # verwenden. Hier ist ein Artikel auf msdn, der zeigt, wie:
http://code.msdn.microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a13880
quelle
Ich habe stattdessen eine viel einfachere Lösung gefunden.
Ich habe eine
.dll
Datei mit Javascript erstellt und sie dann mit dem Javascript-Compiler kompiliert, der in einer VS2013-Entwickler-Eingabeaufforderung verfügbar ist.Sobald wir das haben,
.dll
fügen wir es einfach dem\Support
Ordner hinzu und verweisen dann auf es im Projekt, das Javascript-Anweisungen auswerten musste.Detaillierte Schritte zum Erstellen eines
.dll
:Erstellen Sie im Editor eine Datei mit nur folgenden Inhalten:
Speichern Sie die Datei unter
C:\MyEval.js
Öffnen Sie eine VS2005-Eingabeaufforderung (Start, Programme, VS2005, VS2005-Tools).
Geben Sie ein
Cd\
, um zu gelangenC:\
Art
Eine neue Datei mit dem Namen wird erstellt
MyEval.dll
.Kopieren Sie
MyEval.dll
in das Projekt und referenzieren Sie es (auch ReferenzMicrosoft.Jscript.dll
).Dann sollten Sie es so nennen können:
Ziel ist
True
.quelle
Ich habe gerade RemObjects Script für .Net ausprobiert .
Es funktioniert, obwohl ich
var a=A.createA();
anstelle dervar a=new A()
Syntax eine statische Factory ( ) aus JavaScript verwenden musste . (Die ExposeType-Funktion macht nur Statik verfügbar!) Nicht viel Dokumentation und die Quelle ist mit Delphi Prism geschrieben, was für mich und den RedGate Reflector eher ungewöhnlich ist.Also: Einfach zu bedienen und einzurichten, aber für fortgeschrittene Szenarien nicht viel Hilfe.
Auch etwas installieren zu müssen, anstatt nur die Assemblys in einem Verzeichnis abzulegen, ist für mich negativ ...
quelle
Die von Microsoft dokumentierte Möglichkeit, Skripterweiterbarkeit für alles hinzuzufügen, ist IActiveScript. Sie können IActiveScript in jeder .NET-App verwenden, um die Skriptlogik aufzurufen. Die Logik kann an .NET-Objekten teilnehmen, die Sie in den Skriptkontext eingefügt haben.
Diese Antwort bietet eine Anwendung, die dies tut, mit Code:
quelle
Hier ist eine Implementierung eines ActiveX Scripting Engine-Hosts in C # verfügbar: Analysieren und Ausführen von JS nach C #
Es ermöglicht die Verwendung von Javascript (oder VBScript) direkt aus C # in nativen 32-Bit- oder 64-Bit-Prozessen. Die vollständige Quelle sind ~ 500 Zeilen C # -Code. Es besteht nur eine implizite Abhängigkeit von der installierten JScript- (oder VBScript-) Engine-DLL.
Zum Beispiel der folgende Code:
zeigt 1.66666666666667 an
quelle
Es gibt auch MsieJavaScriptEngine, die die Internet Explorers Chakra Engine verwendet
quelle
Ich glaube, alle wichtigen OpenSource-JS-Engines (JavaScriptCore, SpiderMonkey, V8 und KJS) bieten Einbettungs-APIs. Das einzige, mit dem ich tatsächlich direkt vertraut bin, ist JavaScriptCore (der Name der JS-Engine, in der SquirrelFish lebt), die eine reine C-API bereitstellt. Wenn Speicher zur Verfügung steht (es ist schon eine Weile her, seit ich .NET verwendet habe), unterstützt .NET die Verknüpfung in C-APIs recht gut.
Ich bin mir ehrlich gesagt nicht sicher, wie die APIs für die anderen Engines aussehen, aber ich weiß, dass sie alle von ihnen bereitgestellt werden.
Abhängig von Ihren Zwecken ist JScript.NET möglicherweise am besten geeignet, da Sie bei all diesen anderen Engines diese in Ihre App aufnehmen müssen, da JSC das einzige ist, das tatsächlich mit einem Betriebssystem geliefert wird, dieses Betriebssystem jedoch MacOS: D ist
quelle
Ich weiß, dass ich einen alten Thread öffne, aber ich habe viel an smnet (spidermonkey-dotnet) gearbeitet. In den letzten Jahren. Das Hauptaugenmerk der Entwicklung lag auf der nahtlosen Einbettung von .net-Objekten in die Spidermonkey-Engine. Es unterstützt eine Vielzahl von Konvertierungen von js-Werten in .net-Objekte. Einige davon, einschließlich Delegierte und Veranstaltungen.
Nur zu sagen, es könnte sich lohnen, jetzt nachzuschauen, da es eine stetige Entwicklung gibt :). Ich halte das SVN-Repo mit Fehlerkorrekturen und neuen Funktionen auf dem neuesten Stand. Die Quell- und Projektlösungsdateien sind so konfiguriert, dass sie beim Download erfolgreich erstellt werden. Wenn es Probleme bei der Verwendung gibt, können Sie gerne eine Diskussion eröffnen.
Ich verstehe den Wunsch nach einer verwalteten Javascript-Lösung, aber von allen verwalteten Javascript-Lösungen, die ich verwendet habe, fehlen ihnen einige wichtige Funktionen, die dazu beitragen, dass sie sowohl robust als auch einfach zu handhaben sind. Ich selbst warte darauf, dass IronJS ein wenig reift. Während ich warte, habe ich Spaß beim Spielen mit spidermonkey-dotnet =)
spidermonkey-dotnet Projekt und Download-Seite
Bearbeiten: Dokumentations-Wiki-Seite heute Nachmittag erstellt.
quelle
Probieren Sie ReoScript aus , einen in C # implementierten Open-Source-JavaScript-Interpreter.
Mit ReoScript kann Ihre Anwendung JavaScript ausführen. Es verfügt über eine Vielzahl von Erweiterungsmethoden wie SetVariable, Function Extension, CLR-Typ, .Net-Ereignisbindung usw.
Hallo Welt:
Und hier ist ein Beispiel für ein Skript, das eine Winform erstellt und zeigt.
quelle
Verwenden Sie JSCRIPT.NET, um eine Bibliothek (DLL) der js abzurufen. Verweisen Sie dann in Ihrer .NET-Anwendung auf diese DLL, und Sie sind einfach da. GETAN!
quelle
Sie können Rhino, eine auf Java geschriebene Mozilla-Javascript-Engine, verwenden und mit IKVM verwenden. Hier einige Anweisungen
Anleitung: https://www.codeproject.com/Articles/41792/Embedding-JavaScript-into-C-with-Rhino-and-IKVM
quelle
V8.NET ist ein neues Kind auf dem Block (Stand April 2013), das die native V8-Engine-Funktionalität genauer umschließt . Dies ermöglicht eine bessere Kontrolle über die Implementierung.
quelle
Mit der
ASP.Net MVC4 Razor
View-Engine ist dies jetzt möglich . Der Code lautet wie folgt:und
Razor
ist nicht nur für MVC4 oder andere Webanwendungen und Sie können es in Offline-Desktop-Anwendungen verwenden.quelle