Die .Net-CLR als Makro-Baukasten

Jetzt geht’s ans Ausführen

Wenn nun sicher gestellt ist, dass der übergebene C#-Quelltext keine Fehler enthält, kann unser Programm css den Code auch gleich ausführen. Wie der Name CompileAssemblyFromFile() schon vermuten lässt, ist das eigentliche Resultat dieser Methode eine neue Assembly. Die findet sich in den CompilerResults unter der Eigenschaft CompiledAssembly.

Eine Assembly erhält einen Eintrittsprungpunkt zum direkten Ausführen, wenn das übersetzte Programm eine statische Methode mit dem Namen Main enthält. Das ist beim unserem Testprogramm auch der Fall. Den Eintrittspunkt können Sie einfach aufrufen:

CompilerResults results = c.CompileAssemblyFromFile( options, args[0]);
results.EntryPoint.Invoke( p1, p2);

Invoke() verlangt zwei Parameter, über die man ein wenig nachdenken muss. Der erste Parameter ist das Objekt, dessen Methode aufgerufen werden soll. Beim EntryPoint handelt es sich in Wirklichkeit um ein Objekt vom Typ MethodInfo. Um eine damit gekapselte Methode aufzurufen, müssen Sie erst die Instanz spezifizieren, für die die Methode aufgerufen werden soll. In unserem Beispiel handelt es sich jedoch um eine statische Methode. Es gibt also kein entsprechendes Objekt. In diesem Fall kann man als ersten Parameter null übergeben.