2

最近开始使用 Reflection、Reflection.Emit 和 Code Dom。我编码的目的是加载一个程序集(例如“C:\Temp\MyAssembly.exe”),读取它的类和方法。这已经完成,但是我有兴趣将“MyAssembly.exe”的副本保存到“MyAssembly.dll”。原因是我想检测代码并对方法进行一些更改。我知道如何创建新程序集并保存它们,但我不确定是否可以将扩展名为 .exe 的现有程序集(包括其所有类和方法)“克隆”到 .dll。

我将不胜感激任何建议!谢谢。彼得

4

1 回答 1

0

简单地将“MyAssembly.exe”的副本保存到“MyAssembly.dll”应该不是什么大问题(例如,使用 File.Copy)并且不需要 Reflection 或 Reflection.Emit。

但是,正如评论所揭示的那样,问题更多是将“MyAssembly.exe”的修改副本保存到不同的文件名。无法使用 Reflection.Emit 修改现有程序集,但您还有其他选择:

  • 您可以使用第三方工具(例如CecilMicrosoft CCI)来加载程序集、修改它并以不同的名称保存它;
  • 您可以使用 .NET 框架/SDK 中包含的 IL 反汇编器和 IL 汇编器来反汇编,然后修改,然后重新组装您的程序集;
  • 理论上,您可以加载程序集,通过反射分析它并使用反射发出一个完全等效的新程序集。Emit;但是,我不会走那条路,因为要做到这一点将是一项巨大的工作。
于 2012-10-15T14:08:45.370 回答