是否可以从我的AppDomain导出DLL定义?

时间:2013-01-13 03:40:52

标签: c# reflection

我的代码库中有代码我不熟悉我正在寻找清理并锁定测试用例。

我面临的问题是

A)编写它的开发人员不再使用该公司,看起来没有使用任何标准且没有进行代码审查,因此甚至没有注释(变量被命名为a,b和c以及功能是200行......呃)

B)编写它的开发人员有一个方括号圆孔的心态(即“嘿,我刚学到的这个新功能非常酷,我想我会滥用它”)< / p>

C)它非常混乱,没有文档记录,并且重写其功能是一项非常重要的任务

那说,代码是spaghetti我缩小了一个部分,使得大量的Reflection.Emit调用动态地创建一个执行工作的dll。这完全可以完成手头的任务,但这一点很难实现,但请参见B)点。

我有一半想说“忘记这个”,只是重写代码,这样我就可以用测试将其锁定。另一半想要挽救那里的东西,因为我知道它有效,我的客户每天都使用这些代码,而且这并不容易。

有没有办法做以下的事情?

foreach(Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
    if(IS_Assembly_IM_LOOKING_FOR(a))
    {
        SaveToFile(a, @"C:\Temp\MyAssembly.dll")
    }
}

这样我就可以拥有一个“锁定”版本的程序集,我可以单独为它编写单元测试,并且有0%的机会通过不小心修改动态创建它的代码来破坏它?

1 个答案:

答案 0 :(得分:0)

  1. 您可以修改创建程序集的代码,以便将其保存到磁盘(请参阅this SO question
  2. 您也可以使用调试器(例如WinDbg)成功完成此操作,调试器可以将内存中的程序集转储到文件中。