Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以从我的AppDomain导出dll定义?_C#_Reflection - Fatal编程技术网

C# 是否可以从我的AppDomain导出dll定义?

C# 是否可以从我的AppDomain导出dll定义?,c#,reflection,C#,Reflection,我的代码库中有我不熟悉的代码,我希望用测试用例清理和锁定这些代码 我面临的问题是 A) 编写它的开发人员已经不在公司了,而且看起来没有使用标准,也没有进行代码审查,所以甚至没有评论(变量名为A、b和c,函数长200行……啊) B) 写这篇文章的开发者有一种见仁见智的心态(即“嘿,我刚刚学到的这个新功能真的很酷,我想我会滥用它的”) C) 这是一个令人难以置信的混乱、没有文档记录的任务,重写它的功能是一项非常重要的任务 这就是说,代码是意大利面条我已经缩小了一个部分,使大量的反射。发射调用动态作出

我的代码库中有我不熟悉的代码,我希望用测试用例清理和锁定这些代码

我面临的问题是

A) 编写它的开发人员已经不在公司了,而且看起来没有使用标准,也没有进行代码审查,所以甚至没有评论(变量名为A、b和c,函数长200行……啊)

B) 写这篇文章的开发者有一种见仁见智的心态(即“嘿,我刚刚学到的这个新功能真的很酷,我想我会滥用它的”)

C) 这是一个令人难以置信的混乱、没有文档记录的任务,重写它的功能是一项非常重要的任务

这就是说,代码是意大利面条我已经缩小了一个部分,使大量的反射。发射调用动态作出一个dll来执行这项工作。要完成手头的任务,这是难以置信的,但请参见第B点)

我有一半的人想说“忘了这一点”,然后重写代码,这样我就可以通过测试将其锁定。另一半人想挽救那里的东西,因为我知道它是有效的,我的客户每天都在使用代码,这并不容易

有没有办法做到以下几点

foreach(Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
    if(IS_Assembly_IM_LOOKING_FOR(a))
    {
        SaveToFile(a, @"C:\Temp\MyAssembly.dll")
    }
}
这样我就可以拥有一个“锁定”版本的程序集,并且可以独立地为它编写单元测试,并且有0%的几率通过意外修改动态创建它的代码来破坏它

  • 您可以修改创建程序集的代码,以便将其保存到磁盘(请参阅)
  • 您还可以使用调试器(如WinDbg)成功地完成此操作,该调试器可以将程序集从内存转储到文件中
  • 可能重复的