Laden...

String als Code ausführen

Erstellt von Jack_AI vor 16 Jahren Letzter Beitrag vor 16 Jahren 2.350 Views
J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren
String als Code ausführen

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

N
335 Beiträge seit 2006
vor 16 Jahren

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

1.271 Beiträge seit 2005
vor 16 Jahren

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.

2.921 Beiträge seit 2005
vor 16 Jahren

z.B. ist auch

Formeleditor

eine gute Möglichkeit oder suche im Forum nach C# Script.

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

G
18 Beiträge seit 2005
vor 16 Jahren

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!

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

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