Ist es möglich, eine dynamische Assembly auf der Festplatte zu speichern?

Ich habe kürzlich Ayendes Buch gekauftAufbau von DSLs in Boo (Kauf es, lies es, es ist großartig), aber ich stoße auf ein Implementierungsproblem und möchte sehen, wie der generierte Code aussieht. Normalerweise würde ich Reflektor verwenden, um den Code zu betrachten, aber in diesem Fall sind die Assemblys dynamisch und nur im Speicher. Gibt es eine Möglichkeit, dynamische Assemblys auf der Festplatte zu speichern, damit ich sie wiedergeben kann?

BEARBEITEN / Meine Antwort:

Wow, es hat eine Weile gedauert, bis ich zu diesem zurückgekehrt bin. Leider habe ich von der ursprünglichen Frage ein wichtiges Stück weggelassen.

Wichtiger Hinweis: Ich benutzeAyendes RhinoDSL-Bibliothek wie er im Buch empfiehlt. Ich habe Zugriff auf den Boo-Compiler in meiner Unterklasse von DslEngine, der so aussieht:

public class JobEngine : DslEngine
{
    protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
    {
        pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
    }
}

Um das Wenigste zu ändern und das zu bekommen, was ich wollte, musste ich eine Zeile hinzufügen ...

public class JobEngine : DslEngine
{
    protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
    {
        compiler.Parameters.GenerateInMemory = false; // <--- This one.
        pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
    }
}

Dies führte dazu, dass der Compiler die Assembly in mein Verzeichnis ~ \ LocalSettings \ Temp ausgab und ich sie dann wiedergeben konnte. Es ist wichtig zu beachten, dass diese Änderung zum Absturz des restlichen Programms führte (RhinoDSL konnte die Assemblys nicht mehr im Speicher finden, da ich sie auf die Festplatte ausgab). Dies ist daher nur als Debugging-Tool nützlich.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage