我刚刚使用Reflector反汇编了一个项目进行调试,但它似乎不愿意解码自动属性的“编译结果”,例如:下一行给出了语法错误。我已尝试手动修复这些,但每次修复时,都会出现更多。
private string <GLDescription>k__BackingField;
我能做些什么吗?
答案 0 :(得分:2)
编译器生成带有“难以形容的名称”的字段 - 即在C#本身中是非法的字段,但它们是有效的IL。
没有将IL准确转换为“普通”C#(没有自动属性)。您可以将<
和>
替换为_
,这将提供合法代码,但当然它不再是完全相同的代码。但是,如果您只是在调试能力之后,这将不会成为问题。
如果您反编译迭代器(即使用yield
语句的方法),您会发现更多相同内容,包括使用fault
块,类似于finally
块,但它们只是发生异常时运行(但没有捕获异常)。各种其他构造也会生成不可描述的名称,包括匿名方法,lambda表达式和匿名类型。
更广泛地说,您是否有权反编译此代码?如果作者不介意你这样做,他们可能愿意给你开始的源代码,这将使你的生活更轻松。如果他们不希望您开始调试他们的源代码,您应该考虑反编译代码的道德(并且可能是合法的)分支。这可能因地点而异:请咨询真正的律师以获得更明确的指导。
编辑:看过你自己的答案后,这很有道理。我会把它留在这里作为背景材料。答案 1 :(得分:2)
哈!愚蠢的我:我所要做的就是将Reflector的选项中的反汇编器优化设置为.NET 3.5。我的是2.0。