Wie kann ich C#-Code mit Roslyn aus einer Zeichenfolge ausführen und globale Variablen aus einem Dictionary<string, obje
Posted: 31 Dec 2024, 16:10
Ich arbeite an einer C#-Anwendung, in der ich mit Roslyn C#-Code ausführen muss, der als Zeichenfolgeneingabe bereitgestellt wird. Die Herausforderung besteht darin, diesen Code auszuführen und auf globale Variablen zuzugreifen, die in einem Dictionary gespeichert sind. Die Variablen sind dynamisch, abhängig von der Eingabe des Benutzers.
Ich übergebe das Objekt globals, erhalte jedoch die folgenden Kompilierungsfehler:
Diese Fehler weisen darauf hin, dass das Skript die Variablen x, y und message nicht finden kann, obwohl sie sich im Wörterbuch befinden. Wie kann ich diese dynamischen globalen Variablen korrekt an das Skript übergeben?
Hinweis: Die im Skript verwendeten Variablen können jeden Typ haben, JOBJECT DataTables...
Code: Select all
static async Task Main(string[] args)
{
var variables = new Dictionary
{
{ "x", 10 },
{ "y", 20 },
{ "message", "Hello, Roslyn!" }
};
string script = @"
var result = x + y;
$""{message} Result: {result}"";
";
// Options de script
var options = ScriptOptions.Default.AddReferences(
typeof(object).Assembly
);
var globals = new Globals { Variables = variables };
try
{
var result = await CSharpScript.EvaluateAsync(
script,
options,
globals
);
Console.WriteLine(result);
Console.ReadLine();
}
catch (CompilationErrorException ex)
{
Console.WriteLine("Erreur de compilation :");
Console.WriteLine(string.Join(Environment.NewLine, ex.Diagnostics));
}
Console.ReadLine();
}
Code: Select all
Erreur de compilation :
(2,26): error CS0103: The name 'x' does not exist in the current context
(2,30): error CS0103: The name 'y' does not exist in the current context
(3,16): error CS0103: The name 'message' does not exist in the current context
(3,13): error CS0201: Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement
Hinweis: Die im Skript verwendeten Variablen können jeden Typ haben, JOBJECT DataTables...