Compré recientemente el libro de Ayende Building DSLs in Boo (cómpralo, léelo, es increíble) pero me encuentro con un problema de implementación y quiero ver cómo se ve el código generado. Normalmente usaría el reflector para mirar el código, pero en este caso los ensamblajes son dinámicos y solo en la memoria. ¿Hay alguna forma de guardar ensamblajes dinámicos en el disco para que pueda reflejarlos?¿Es posible guardar un ensamblaje dinámico en el disco?
EDITAR/Mi respuesta:
Wow, tomó un tiempo para volver a éste. Lamentablemente, dejé una parte importante de la pregunta original.
Bit importante: Estoy usando Ayende's RhinoDSL library como él lo recomienda en el libro. Tengo acceso al compilador metida en mi subclase de DslEngine que se parece a esto:
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"));
}
}
Para cambiar el menos posible y que lo que quería que necesitaba para añadir una línea ...
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"));
}
}
Este hizo que el compilador enviara el ensamblado a mi directorio ~ ~ LocalSettings \ Temp y luego pude reflejarlo. Es importante tener en cuenta que realizar ese cambio provocó que el resto del programa se rompa (RhinoDSL ya no pudo encontrar los ensamblados en la memoria porque los elaboré en el disco), por lo que esto solo es útil como herramienta de depuración.
Uso serialización de objetos XML?!. – serhio
¿creas esos ensamblajes a través de CodeDom? –