Evaluieren Sie C#-Ausdrücke dynamisch
- Verwenden Sie die Roslyn-Skript-API, um C#-Ausdrücke dynamisch auszuwerten
- Schritte zum Verwenden der Skript-API zum dynamischen Auswerten von C#-Ausdrücken
In diesem trivialen Leitfaden geht es um die Verwendung der Skript-API, um die C#-Ausdrücke dynamisch zur Laufzeit auszuwerten. Zu diesem Zweck werden wir die Roslyn Scripting API verwenden und lernen.
Verwenden Sie die Roslyn-Skript-API, um C#-Ausdrücke dynamisch auszuwerten
Roslyn ist eine Plattform für .NET-Compiler mit Codeanalyse-APIs und Compilern für .NET-Sprachen.
- Es ist eine Technologie, die .NET-Quellcode in eine ausführbare Binärdatei konvertiert.
- Sein Hauptzweck bezieht sich auf IDEs (Integrated Development Environments) und die Entwicklung anderer Tools.
- Darüber hinaus enthält es Funktionen für die Skript-API, mit denen Sie die Ausführung von benutzerdefiniertem Code zur Laufzeit hinzufügen können.
Die Skript-APIs ermöglichen es .NET-Anwendungen, eine C#-Engine zu starten und Codefragmente für vom Host bereitgestellte Objekte auszuführen. Die Roslyn-Scripting-API kann für folgende Zwecke verwendet werden:
- Für die Auswertung von C#-Ausdrücken.
- Zum Hinzufügen einiger Referenzen oder Importieren einer beliebigen Bibliothek zur Laufzeit.
- Zum Parametrieren eines Skripts.
- Zum mehrmaligen Ausführen eines Skripts.
- Für die Erstellung eines Delegaten des Skripts.
- Entwicklung und Analyse eines C#-Skripts.
Schritte zum Verwenden der Skript-API zum dynamischen Auswerten von C#-Ausdrücken
Um mit der Skripterstellung zu beginnen, müssen Sie zunächst die Skripterstellungs-API in Ihrem C#-Projekt installieren.
Installation der API
Erstellen Sie für die Installation der API zunächst eine neue Konsolenanwendung in Visual Studio. Nachdem die Anwendung erstellt und in die IDE geladen wurde, gehen Sie zu Tools->NuGet Package Manager->Manage NuGet Packages for the Solution
. Das folgende Fenster wird angezeigt:
Gehen Sie im Fenster zur Registerkarte Durchsuchen und suchen Sie nach CSharp Scripting. Installieren Sie dann eines der markierten Pakete.
Gehen Sie nach der Paketinstallation zu Ihrer Datei Program.cs
.
Schließen Sie die Bibliotheksdateien ein
Nach der Installation des Pakets müssen Sie die erforderlichen Bibliotheksdateien wie folgt in Ihre Codedatei aufnehmen:
using Microsoft.CodeAnalysis.CSharp.Scripting;
Schreiben Sie den Code, um den Ausdruck auszuwerten
Zur Auswertung des Skripts wird die Methode EvaluateAsync()
verwendet. Diese Methode nimmt eine Zeichenfolge entgegen, die den auszuwertenden Ausdruck enthält, und gibt eine Zeichenfolge zurück, die das Ergebnis dieses Ausdrucks enthält.
Dies ist die einzige Funktion, die in der Bibliothek verwendet wird.
static void Main(string[] args) {
Console.WriteLine("Welcome to C# Scripting");
Console.WriteLine("Enter the code to run as a C# Script");
var command = Console.ReadLine();
var results = CSharpScript.EvaluateAsync(command).Result;
Console.WriteLine(results);
}
Im obigen Codesegment haben wir den Ausdruck als Eingabe des Benutzers genommen und dann an die Methode EvaluateAsync()
übergeben. Diese Methode gibt das Ergebnis in der Variable Ergebnis
zurück, das auf dem Bildschirm ausgegeben wird.
Dies ergibt die folgende Ausgabe:
Wir können den Code so ändern, dass das Programm weiterhin nach den Ausdrücken als Eingabe fragt, bis der Benutzer exit
eingibt und die Ausgabe anzeigt. Dazu verwenden wir eine while
-Schleife und übernehmen die Eingabe in dieser Schleife.
Schauen wir uns das Codesegment für diese Implementierung an:
static void Main(string[] args) {
Console.WriteLine("Welcome to C# Scripting");
Console.WriteLine("Enter the code to run as a C# Script");
var command = Console.ReadLine();
while (command.ToString() != "exit") {
var results = CSharpScript.EvaluateAsync(command).Result;
Console.WriteLine(results);
command = Console.ReadLine();
}
}
Sie können aus dem Ausgabefenster oben sehen, dass das Programm Eingaben entgegennimmt und spontan Ausgaben ausgibt. Wenn der Benutzer den Ausgang
betritt, verlässt er den Code.
Solche Arten von Skripten werden für Unit-Tests vieler Desktop-Anwendungen verwendet.