Ich kaufte vor kurzem Ayendes Buch Building DSLs in Boo (kaufen Sie es, lasen Sie es, es ist fantastisch), aber ich stoße auf ein Implementierungsproblem, und ich möchte sehen, wie der generierte Code aussieht. Ich würde normalerweise Reflektor verwenden, um den Code zu betrachten, aber in diesem Fall sind die Assemblies dynamisch und nur im Speicher. Gibt es eine Möglichkeit, dynamische Assemblys auf der Festplatte zu speichern, damit ich sie wiedergeben kann?Kann eine dynamische Assembly auf Festplatte gespeichert werden?
EDIT/Meine Antwort:
Wow, dauerte es eine Weile wieder in dieses zu kommen. Leider habe ich ein wichtiges Stück von der ursprünglichen Frage entfernt.
Wichtiges Bit: Ich verwende Ayende's RhinoDSL library, wie er in dem Buch empfiehlt. Ich habe Zugang zu den boo Compiler in meiner Unterklasse von DslEngine, die wie folgt aussehen:
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 die am wenigsten zu ändern und bekommen, was ich wollte ich eine Zeile hinzufügen benötigt ...
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"));
}
}
Diese hat den Compiler veranlaßt, die Assembly in mein ~ \ LocalSettings \ Temp-Verzeichnis auszugeben, und dann könnte ich es dann reflektieren. Es ist wichtig zu beachten, dass diese Änderung dazu führte, dass der Rest des Programms unterbrochen wurde (RhinoDSL konnte die Assemblies nicht mehr im Speicher finden, weil ich sie auf die Festplatte ausgegeben habe). Dies ist nur als Debugging-Tool nützlich.
Verwenden Objekt XML-Serialisierung die Pipeline von CompileToMemory zu CompileToFile ändern?!. – serhio
erstellen Sie diese Assemblys über CodeDom? –