1

有没有办法让反射器反汇编回新的 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# 代码。

4

3 回答 3

5

至于自动实现的属性,它们get; set;在最新版本中表现良好(即没有编译器生成的支持字段)。只要确保您设置Optimization.NET 3.5.NET 4.0View -> Options -> Disassembler.

于 2010-08-28T09:46:26.110 回答
4

并非所有内容都是双向翻译。诸如 lambda 表达式、迭代器和自动实现的属性之类的东西是 C# 中的语法糖,可以为我们编译成真正的代码。并不总是可能获取此编译代码并确定原始代码的外观。

如果 Reflector 为了检测这些句法抽象的结果而对代码进行了假设,然后微软更改了编译器,它将再次被破坏。相反,Reflector 似乎选择将其反编译基于 CLR 和语言规范,这些规范不太容易更改,恕不另行通知。

于 2010-08-21T22:26:35.637 回答
-3

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

于 2010-08-21T22:10:15.457 回答