最近我开始使用 Reflection、Reflection.Emit 和 Code Dom。我编码的目的是加载一个程序集(例如“C:\Temp\MyAssembly.exe”),读取它的类和方法。这已经完成,但我有兴趣将“MyAssembly.exe”的副本保存到“MyAssembly.dll”。原因是因为我想检测代码并对方法进行一些更改。 我知道如何创建新程序集并保存它们,但我不确定是否可以将扩展名为 .exe 的现有程序集(包括其所有类和方法)“克隆”到 .dll。
我将不胜感激任何建议! 谢谢。 彼得
最佳答案
简单地将“MyAssembly.exe”的副本保存到“MyAssembly.dll”应该不是什么大问题(例如,使用 File.Copy)并且不需要 Reflection 或 Reflection.Emit。
但是,正如评论所揭示的那样,问题更多在于将“MyAssembly.exe”的修改副本保存为不同的文件名。无法使用 Reflection.Emit 修改现有程序集,但您有其他选择:
- 您可以使用第三方工具,例如 Cecil或 Microsoft CCI加载程序集,修改它,并以不同的名称保存它;
- 您可以使用 .NET 框架/SDK 中包含的 IL 反汇编器和 IL 汇编器来反汇编、修改,然后重新组装您的程序集;
- 理论上,您可以加载程序集,通过 Reflection 对其进行分析,然后使用 Reflection.Emit 发出一个完全等效的新程序集;但是,我不会走那条路,因为要做到这一点将是一项艰巨的工作。
关于c# - 加载程序集并使用不同的名称和扩展名复制它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109626/