Mit C# Scripting ist es möglich, zur Laufzeit C# Code auszuführen um so die eigene Applikation zu erweitern oder leichter zu debuggen.
An Hand eines kleinen Beispiels wird gezeigt, wie man Programm-Code mit Script-Code verbinden kann.
Hinzufügen des passenden nuGet – Package
Definieren einer Globals-Klasse
Mit folgender Klasse, kann das Script direkt mit der Anwendung, die das Script ausführt, interagieren:
public class API { public void WriteToConsole(string input) { Console.WriteLine(input); } public List<object> GlobalData { get; } = new List<object>(); }
Dabei sind alle Methoden und Properties im auszuführenden Script direkt verfügbar.
Anlegen und Kompilieren des Scripts
Nun muss das Script noch erstellt und kompiliert werden.
string script = "int x=5;" + "WriteToConsole(\"Die Zahl: \"+x);" + "string testString=\"Example\";"; var options = ScriptOptions.Default .WithReferences(typeof(Type1).Assembly, typeof(Type2).Assembly) .WithImports("System.Collections.Generic", "System.Linq"); var finalScript = CSharpScript.Create(script, options, typeof(API)); finalScript.Compile();
Ausführen des Scripts
Beim Ausführen des Skriptes kann dann eine Instanz der API mitgegeben werden:
ScriptState<object> result = await finalScript.RunAsync(new API());
Auswerten des Results
Mit Hilfe des Result Objektes kann man dann auf die erstellten Variablen und deren Werte zugreifen:
foreach (var item in result.Variables) { Console.WriteLine(item.Name + "=" + item.Value); }
Sehr zu empfehlen ist auch im offiziellen WiKi des Projektes nachzuschauen: https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples