Hallo.
Mich (Anfänger) würde interessieren, ob es eine Funktion gibt, die einen String als Code ausführt.
Beispiel:
string code = "Console.WriteLine("Das ist ein Test")";
Irgendeinefunktion(code);
-> Ausgabe: Das ist ein Test
Danke im Voraus für die Hilfe,
Jack_AI
-> Informatik-Infotainment <-
Hi!
Anders als in z.B. Javascript ist das in C# nicht so einfach möglich, da C#-Code nicht interpretiert wird.
Dein C#-Code wird vom Compiler in MSIL-Code kompiliert, der dann von der .NET-Runtime ausgeführt wird. Das hat als Konsequenz, dass du keinen Code ausführen kannst, den du nicht in deinen Code-Dateien stehen hast (jedenfalls nicht ohne weiteres).
Als Lösung kannst Du folgendes versuchen: Wandle den String in ein vollständiges C#-Programm (mit Main-Funktion usw.) und benutze den C#-Compiler um den Code zur Laufzeit zu kompilieren. Das Kompilat kannst Du dann direkt aus dem Speicher in einer Sandbox von der Runtime ausführen lassen.
Mfg NeuroCoder
Hallo Jack_AI,
Dieses Thema wurde schon häufiger behandelt, nutze also bitte die Suchfunktion und poste deine besten Ergebnisse hier.
Schau auch mal Formel parsen an, das ist mir jetzt spontan eingefallen, weil mir das mal weitergeholfen hatte, als ich dieses Problem hatte.
Gruß,
Thomas
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
C# Script findest Du hier: http://www.members.optusnet.com.au/~olegshilo/CurrentRelease.html
Lade Dir den Quelltext und die Doku herunter und füge Deinem Projekt folgende Dateien hinzu:
AsmHelper.cs
AssemblyExecutor.cs
AssemblyResolver.cs
csparser.cs
csscript.cs
fileparser.cs
GACHelper.cs
CSScriptLib.cs
Jetzt Kannst Du folgendermassen Code als String ausführen:
// skript ausführen mit DEBUG-Informationen und ohne eine Datei zu erstellen
System.Reflection.Assembly asm = CSScript.LoadCode (strSourceCode, null, true);
// statische Methode im Quelltext ausführen
CSScriptLibrary.AsmHelper asmHelper = new AsmHelper(asm);
asmHelper.Invoke("DerNamespaceInDemSichDieMethodeBefindet.DieStatischeMethode", new object[] { /* liste der parameter, die der methode übergeben werden */ };
Das wars eigentlich 🙂
Es gibt keinen Löffel!
Danke für alle Antworten!
Ich habe schon befürchtet, dass es durch die Umwandlung in MSIL-Code nicht möglich sein würde.
Was ich aber nicht verstanden habe, ist die Geschichte mit C#-Script. Kann mir vielleicht jemand etwas zu diesem C#-Script sagen? Ich habe mir zwar die Website von C#-Script und kurz die Dokumentation angeschaut, habe aber die Befürchtung, dass C#-Script einige wichtige Eigenschaften von C# beschränken wird (Stichwort "Annäherung zu einer Skriptsprache"). ...ist allerdings nur meine erste Assoziation.
Jack_AI
-> Informatik-Infotainment <-