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