反射器和自动属性的问题

时间:2009-05-26 19:55:07

标签: c# reverse-engineering decompiling reflector disassembly

我刚刚使用Reflector反汇编了一个项目进行调试,但它似乎不愿意解码自动属性的“编译结果”,例如:下一行给出了语法错误。我已尝试手动修复这些,但每次修复时,都会出现更多。

private string <GLDescription>k__BackingField;

我能做些什么吗?

2 个答案:

答案 0 :(得分:2)

编译器生成带有“难以形容的名称”的字段 - 即在C#本身中是非法的字段,但它们是有效的IL。

没有将IL准确转换为“普通”C#(没有自动属性)。您可以将<>替换为_,这将提供合法代码,但当然它不再是完全相同的代码。但是,如果您只是在调试能力之后,这将不会成为问题。

如果您反编译迭代器(即使用yield语句的方法),您会发现更多相同内容,包括使用fault块,类似于finally块,但它们只是发生异常时运行(但没有捕获异常)。各种其他构造也会生成不可描述的名称,包括匿名方法,lambda表达式和匿名类型。

更广泛地说,您是否有权反编译此代码?如果作者不介意你这样做,他们可能愿意给你开始的源代码,这将使你的生活更轻松。如果他们希望您开始调试他们的源代码,您应该考虑反编译代码的道德(并且可能是合法的)分支。这可能因地点而异:请咨询真正的律师以获得更明确的指导。

编辑:看过你自己的答案后,这很有道理。我会把它留在这里作为背景材料。

答案 1 :(得分:2)

哈!愚蠢的我:我所要做的就是将Reflector的选项中的反汇编器优化设置为.NET 3.5。我的是2.0。