如何使Reflector不会在新语法上窒息

时间:2010-08-21 22:07:52

标签: c# decompiling reflector decompiler

有没有办法让反射器反汇编回新的c#构造?

自动实施的属性如下:

[CompilerGenerated]
private string <TypeName>k__BackingField;
 public string TypeName
 {
     [CompilerGenerated]
     get
      {
         return this.<TypeName>k__BackingField;
      }
      [CompilerGenerated]
      private set
      {
          this.<TypeName>k__BackingField = value;
      }
 }

使用字符串整数或对象的通用类型出错:

Tuple<User,String><User,string>

更不用说为响应某些基于lambda的代码而生成的令人困惑的枚举器。

任何想法?回到原始形式会很棒,但是进入相同的可编辑状态将是向前迈出的一大步。以上示例不是有效的C#代码。

3 个答案:

答案 0 :(得分:5)

关于自动实现的属性,它们在最新版本中很好(即get; set;没有编译器生成的后备字段)。只需确保在Optimization中将.NET 3.5设置为.NET 4.0View -> Options -> Disassembler

答案 1 :(得分:4)

并非所有内容都是双向翻译。像lambda表达式,迭代器和自动实现的属性这样的东西是C#中的语法糖,它们被编译成我们的真实代码。并不总是可能采用这个编译的代码并确定原始代码的样子。

如果Reflector对代码进行了假设,以便检测这些语法抽象的结果,然后Microsoft更改了编译器,那么它将再次被破坏。反射器似乎选择将其反编译基于CLR和语言规范,这些规范不受更改,恕不另行通知。

答案 2 :(得分:-3)

嗯,显然,Reflector还没有这个功能。它甚至还没有赶上C#3.0,更不用说C#4.0了。只需等待下一个版本(如果有的话)。