JavaScript ist eine dynamische Sprache. Der Code wird nicht kompiliert sondern zur Laufzeit interpretiert. Dadurch wird unter anderem die eval Funktion ermöglicht, die innerhalb eines Skripts einfach JavaScript Code als Parameter entgegen nimmt und ausführt.
Im .NET Framework gibt (gab) es eine Variante von JavaScript: JScript. Damit sollte es möglich sein, aus einem C# Programm heraus diese JScript Funktion aufzurufen. Und tatsächlich ist dies sogar sehr einfach möglich. Man muss sich nur darüber im klaren sein, dass das nur eine Übergangslösung ist.
Aus MSDN VsaEngine:
Use of this type is not recommended because it is being deprecated in Visual Studio 2005; there will be no replacement for this feature. Please see the ICodeCompiler documentation for additional help.
In .NET 3.0 ist es damit bereits Schluss. In Zukunft wird wohl eher die Dynamic Language Runtime DLR dafür verwendet.
Das hilft mir aber jetzt nichts. Die einfachste Lösung habe ich in einem Kommentar zu einem Blog-Eintrag von Rick Strahl gefunden: Evaluating JavaScript code from C#
Man erzeugt sich eine JScript Dll:
class EvalClass { function Evaluate(expression: String) { return eval(expression, "unsafe"); } }
jsc /t:library C:\MyEval.js
EvalClass evalClass = new EvalClass();object result = evalClass.Evaluate("2+3");
Das funktioniert wirklich so einfach und gut. Was ich später noch ändern musste, war der zusätzlich String Parameter "unsafe" bei der JScript eval Funktion. Ohne diesen Parameter gibt es eine Security Exception, wenn der übergebene JavaScript Code eine neue Funktion deklariert.
© Copyright 2013, Christian Deger
E-mail