有没有办法以可读的形式从 .NET 程序集中检索编译器生成的代码?

Posted

技术标签:

【中文标题】有没有办法以可读的形式从 .NET 程序集中检索编译器生成的代码?【英文标题】:Is there any way to retrieve the compiler-generated code from the .NET assembly in a readable form? 【发布时间】:2015-05-25 20:59:35 【问题描述】:

例如,如果程序集中的某个 C# 类具有属性 property,编译器会生成 set_propertyget_property 方法,或者如果有 lambda,编译器还会生成帮助器类 c__DisplayClass 或类似的东西.我用ILDasm反汇编程序集的时候可以看到,但是ILDasm给我看的是IL代码,阅读起来不太方便。另一方面,如果我使用 ILSpy 或 Reflector,它们会向我展示我编写的代码,没有编译器生成的类和方法。是否有任何中途方法,可以查看编译器生成的类和方法,但以某种可读的形式,至少比 IL 更具可读性?

【问题讨论】:

好吧,使用 ILSpy 或 Reflector。他们所做的工作,将 IL 转换回可读的 C# 代码,是非常不平凡的,并且在库中通常不可用。 @HansPassant 但是如果我想看看,例如,出于好奇,特定的 lambda 是如何在幕后实现的? 【参考方案1】:

哦,我的问题似乎很愚蠢,因为 ILSpy、JustDecompile 以及我怀疑其他反编译器也可以选择阻止反编译 lambda。

【讨论】:

确实如此。在其中至少一个上,它是通过选择“.NET 2.0”代码激活的,而选择更高版本则可以识别 lambdas。

以上是关于有没有办法以可读的形式从 .NET 程序集中检索编译器生成的代码?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 5 中,如何以可读的方式(使用整数)显示从 range.UpperBound 或 range.LowerBound 返回的原始位?

PHP 以可读的html格式打印数组

在 Unix shell 脚本中以可读的 JSON 格式显示 curl 输出

使用脚本以可读的 JSON 格式显示 curl 命令输出

使用脚本以可读的 JSON 格式显示 curl 命令输出

从人类可读的字符串创建 MKPlacemark/CLPlacemark