PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C#] Beliebigen Code ausführen lassen!?


LordZed
2009-01-27, 11:38:39
Hi! Mir wurde gesagt, dass es möglich sei in C# einen Code über irgendeinen Stream einzulesen (Netzwerk, Datei, wie auch immer - ist ja egal) und diesen dann ausführen zu lassen.

Stimmt das und wenn ja: Wie nennt sich dieses Feature oder wo kann ich mehr darüber finden? Googlesuche war nicht erfolgreich, aber auch einfach weil ich nicht ganz weiß wonach ich da suchen soll! ;)

Gruß, LordZed

Kinman
2009-01-27, 11:59:46
Vielleicht RPC (http://de.wikipedia.org/wiki/Remote_Procedure_Call) oder eher in diese Richtung (http://dotnetblog.saschabaumann.com/2008/08/c-code-dynamisch-kompilieren-mit-codedom-ein-beispiel/)?

mfg Kinman

SentinelBorg
2009-01-27, 12:22:29
Du kannst C# Code laden und intern mittels des C# Compiler in eine Assembly kombilieren lassen und dann ausführen. Alternativ gibts noch eine Art von MSIL Code Injection, das ist aber recht komplex.

Monger
2009-01-27, 12:24:11
Ich glaube was du meinst, sind Reflections.
Sprich: du lädst Code in Form einer Textdatei, eines Textstreams o.ä. , lädst die Klasse, und rufst dann Methoden darauf auf.

Im einfachsten Fall funktioniert das wie mit einem Plugin, d.h. du lädst die Klasse zur Laufzeit, und die erbt dann hoffentlich von irgendeinem Interface oder einer Klasse, so dass du auch Methoden zur Compilezeit darauf aufrufen kannst.
Du kannst auch dynamisch Instanzen bilden, Methoden aufrufen etc. ... nur da wirds langsam echt unhandlich. Das ist nur für sehr spezielle Anwendungen überhaupt interessant.

Java kennt das übrigens auch. Im Endeffekt machst du damit dem Anwender nur das zugänglich, was die Runtime selbst ja ohnehin tun muss. Ab dem nächsten .NET Framework (iirc 4.0) bewegt sich in der Hinsicht allerdings einiges. Da kann man dann über den Weg schnell mal dynamisch irgendwelche Klassen Prototypen zusammenfrickeln...

So gesehen: ja, C# kann beliebigen Code ausführen - solange er syntaktisch korrekt ist.

Gnafoo
2009-01-27, 12:44:31
Schau dir die CSharpCodeProvider-Klasse an. Ich denke das ist etwa das was du suchst. Das Ganze geht btw. auch mit VB.

http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.vbcodeprovider.aspx