C#-Code mit C#-Programm zur Laufzeit kompilieren und Ausführen?



  • Hi Leute,

    ist es möglich, dass ich meinem Benutzer die Möglichkeit gebe in einem Edit-Feld ein Stück C#-Code einzugeben und ich den dann zur Laufzeit kompiliere und in meinem Programm-Scope ausführe?
    Hintergrund ist folgender:
    Der Benuter kann sagen: "Rufe mir Funktion xyz auf" (Beispielsweise eine Funktion, die auf eine Datenbank zugreift und dort einen Query ausführt. Diese Funktion liefert beispielsweise ein SqlDataReader-Objekt zurück).
    Mit dem C#-Code soll der User jetzt die Möglichkeit haben ganz generisch damit arbeiten zu können, beispielsweise gibt er in die Edit-Box ein:

    if(Result.RecordsAffected != 3)
        MessageBox.Show("Error!");
    

    In diesem Fall wird Result eben durch den Rückgabewert dieser Datenbank-Funktion ersetzt (also durch ein SqlDataReader).



  • Haha, wie geil, es scheint tatsächlich möglich zu sein! 😃
    http://www.codeproject.com/csharp/RuntimeCompiling.asp



  • Das ist echt der Hammer. Da is man jahrzehntelang so vernagelt, daß man sich gar nicht mehr die Frage stellt, ob sowas gehen könnte und dann geht das einfach! Wahnsinn.

    Was ich mich aber frage: kann man ein .net Programm schreiben und dann quasi ein Sourcefile (z.B. als .TXT File) einlesen und compilieren lassen? Muß auf dem Rechner dann VS drauf sein oder klappt das auch ohne? Dann könnte man sich ja das VS theoretisch ganz sparen... Wobei die Express-Dinger ohnehin kostenlos sind... Aber dennoch....?



  • Das ist eine gute Frage... Müsste man einfach mal ausprobieren. Aber ich denke, es geht ohne installiertes VisualStudio, da das ganze ja Bestandteil des .NET-Frameworks ist.

    PC-User schrieb:

    Was ich mich aber frage: kann man ein .net Programm schreiben und dann quasi ein Sourcefile (z.B. als .TXT File) einlesen und compilieren lassen?

    Ja, das geht.



  • Ich denke, einen C#-Compiler wird man brauchen. Für Game-Engines ist die Thematik sicherlich interessant, C# als fertige Skriptsprache (der Compiler ist ja kostenlos) und dann zur Laufzeit ultra-performant mit JIT-compilierung die DLL hinzulinken.



  • Optimizer schrieb:

    für Game-Engines C# als fertige Skriptsprache zur Laufzeit ultra-performant mit JIT-compilierung die DLL hinzulinken.

    *lol* 👍 👍
    wieder mal ein Satz bei dem jedem Laien die Ohren flattern 😉

    P.S.: zur Laufzeit ... JIT compilierung, wann denn sonst 😉



  • Polofreak schrieb:

    *lol* 👍 👍
    wieder mal ein Satz bei dem jedem Laien die Ohren flattern 😉

    Aber hallo ist das performant! Mit Sicherheit tausend mal besser, als Lua zu interpretieren, wie in vielen Spielen derzeit üblich.



  • dagegen sag ich doch gar nichts, nur performant ist kein deutsches Wort und wird iaR auch nur von Computer Heinis verwendet (ich sags auch dauernd!)
    und ich fand den Satz im allgemeinen einfach geil 🙂
    War also kein Angriff!!





  • Schau mal im namespace System.Runtime.InteropServices und in der klasse System.EnterpriseServices.RegistrationHelper.
    Irgendwie hatte ich das gemacht, ich weiß nicht mehr wie. 🙂



  • Ja, sicher, man Code zur Laufzeit compilieren und ausführen, ein weiteres schönes Feature von .NET. Genau aus diesem Grund gehört der Compiler csc.exe zum .NET Framework und nicht zum .NET SDK! Jeder, der die Laufzeitumgebung installiert, hat automatisch den Compiler.

    Man kann sich das Visual Studio theoretisch schenken, alles was man braucht ist das SDK und das Framework. Aber VS macht das Entwicklerleben einfacher.


Anmelden zum Antworten