c# - 加载程序集并使用不同的名称和扩展名复制它

标签 c# assemblies reflection.emit system.reflection

最近我开始使用 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 修改现有程序集,但您有其他选择:

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

关于c# - 加载程序集并使用不同的名称和扩展名复制它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109626/

相关文章:

c# - mscorlib.XmlSerializers.DLL 的 FileNotFoundException,它不存在

.net - 我正在尝试使用 System.Reflection.Emit 编写 .NET 编译器 我该如何进行类型解析?

c# - 在使用 bot 框架时,如何设计 skype for business html 消息的样式?

c# - Crystal 报表在C#、asp.net中显示空白页

WPF - 不再使用 <?Mapping > 了吗?

c# - 如何卸载使用 RunAndCollect 创建的动态程序集?

cil - 在 VB.Net 中使用 System.Reflection.Emit.ILGenerator 调用 Random?

c# - 服务器无法在发送上传文件的 HTTP header 后附加 header

c# - 什么是 ("{0,1} ", num);意思是?

c# - 使用同一程序集的不同版本