【问题标题】:Comparing 2 assembly methods using reflection比较使用反射的 2 种组装方法
【发布时间】:2019-10-09 17:56:25
【问题描述】:

是否可以更深入地比较两种使用反射的方法?

例如,我有 file1.dll 和 file2.dll。它们都有 X 类,它有一个方法 Y,它的名称相同并且做同样的事情。
所以我的问题是,是否有可能使用反射看到这两个文件之间的方法 Y 的主体不同?

【问题讨论】:

  • 请在创建新问题前使用搜索:stackoverflow.com/questions/2693881/…
  • 只是为了上下文,你为什么要这样做?
  • @VitaliiIlchenko 我不认为 OP 要求提供详细信息“方法 Y 的主体在这两个文件之间是不同的” - Chris Yungmann 回答所建议的简单差异确实满足该要求......虽然确实 OP 可能实际上在寻找不同的东西,但这感觉足够清晰和完整,可以作为一个单独的问题留给我......(可以通过 downvote 来表示缺乏研究......)
  • @DevEstacion 只是分析代码和比较差异。认为如果这样做可以更容易

标签: c# .net reflection


【解决方案1】:

您可以使用MethodBase.GetMethodBody 后跟MethodBody.GetILAsByteArray 来获取方法主体的MSIL 作为字节数组。然而,正如第二个链接所指出的,

解析方法体需要彻底了解元数据和 MSIL 指令格式。信息可以在公共语言基础设施 (CLI) 文档中找到,尤其是“第二部分:元数据定义和语义”和“第三部分:CIL 指令集”。文档可在线获取;请参阅 MSDN 上的 ECMA C# 和通用语言基础设施标准以及 Ecma 国际网站上的标准 ECMA-335 - 通用语言基础设施 (CLI)。

即使这两种方法具有相同的 MSIL,它们也不一定源自相同的 C# 源代码。您可以尝试使用 Mono.CecilDelegateDecompilerICSharpCode.Decompiler 之类的方式将 MSIL 反编译为 C# 源代码,但我不建议您走这条路,而是建议重新考虑您的方法。

【讨论】:

  • 谢谢,我想我只需要尝试一些不同的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2020-03-24
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多