Ich habe ein Paket geschrieben, SharpByte.Dynamic, um die Aufgabe zu vereinfachen o f Kompilieren und Ausführen von Code dynamisch. Der Code kann für jedes Kontextobjekt unter Verwendung von Erweiterungsmethoden aufgerufen werden, wie weiter unten beschrieben here.
Zum Beispiel
someObject.Evaluate<int>("6/{{{0}}}", 3))
kehrt 3;
someObject.Evaluate("this.ToString()"))
gibt die Stringdarstellung des Kontextobjekts zurück;
someObject.Execute(@
"Console.WriteLine(""Hello, world!"");
Console.WriteLine(""This demonstrates running a simple script"");
");
läuft diese Aussagen als Skript usw.
Executables eine Factory-Methode werden kann, wie leicht verwenden, here im Beispiel zu sehen bekommen --alle Sie brauchen, ist der Quellcode und die Liste aller erwarteten benannte Parameter (unter Verwendung von triple-Dirac-Notation, Token eingebettet sind, wie beispielsweise {{{0}}}, zur Vermeidung von Kollisionen mit string.Format() sowie Lenkern artige Syntaxen):
IExecutable executable = ExecutableFactory.Default.GetExecutable(executableType, sourceCode, parameterNames, addedNamespaces);
Jedes ausführbaren Objekt (Skript oder Ausdruck) ist Thread-sicher, kann gespeichert werden d und reused, unterstützt die Protokollierung von innerhalb eines Skripts, speichert Timing-Informationen und die letzte Ausnahme, falls aufgetreten, usw. Es gibt auch eine Copy() -Methode, die auf jedem kompiliert werden kann, um billige Kopien zu erstellen, dh ein ausführbares Objekt, das aus einem Skript oder einem Ausdruck kompiliert wurde als Vorlage zum Erstellen anderer.
Overhead der Ausführung eines bereits kompilierten Skripts oder einer Anweisung ist relativ niedrig, auf weniger als einer Mikrosekunde auf bescheidener Hardware, und bereits kompilierte Skripts und Ausdrücke werden zur Wiederverwendung zwischengespeichert.
C# Aufruf ironpython eval. Ich habe es in C# 4.0 versucht. keine Erfahrung mit C# 2.0 –
@Peter Long, wo finde ich Dokumentation zu IronPython eval? – smartcaveman
Werfen Sie einen Blick auf [Mono CSharp interaktive Shell] (http://www.mono-project.com/CsharpRepl). Es hat [eval ähnliche Funktionen] (http://www.go-mono.com/docs/index.aspx?link=N:Mono.CSharp). –