相关疑难解决方法(0)

是否可以将动态程序集保存到磁盘?

我最近买了Ayende的书,在Boo中构建DSLs(买它,读它,它真棒)但是我遇到了一个实现问题,我想看看生成的代码是什么样的.我通常会使用反射器来查看代码,但在这种情况下,程序集是动态的,只在内存中.有没有办法将动态程序集保存到磁盘,以便我可以反映它们?

编辑/我的答案:

哇,花了一段时间才回到这个.不幸的是,我从原来的问题中留下了一点重要的一点.

重要的一点:我正在使用Ayende的RhinoDSL库,正如他在书中所建议的那样.我可以访问我的DslEngine子类中的boo编译器,如下所示:

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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

要改变最少并获得我想要的东西我需要添加一行...

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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致编译器将程序集输出到我的〜\ LocalSettings\Temp目录,然后我可以反映它.重要的是要注意,进行该更改会导致程序的其余部分中断(RhinoDSL无法再在内存中找到程序集,因为我将它们输出到磁盘),因此这仅用作调试工具.

.net boo assemblies dynamic

10
推荐指数
1
解决办法
7123
查看次数

如何从内存转储中提取DLL文件?

我有一个内存转储(非托管进程).如何提取(使用windbg)加载到进程中的一个dll?我的意思是实际上将dll文件保存到磁盘中

windbg dump

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

assemblies ×1

boo ×1

dump ×1

dynamic ×1

windbg ×1