有没有办法让反射器反汇编回新的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#代码。
发布于 2010-08-28 17:46:26
至于自动实现的属性,它们在最新版本中表现良好(即作为get; set;,没有编译器生成的支持字段)。只需确保在View -> Options -> Disassembler中将Optimization设置为.NET 3.5或.NET 4.0即可。
发布于 2010-08-22 06:26:36
并不是所有的东西都是双向的。像lambda表达式、迭代器和自动实现的属性这样的东西是C#中的语法糖,可以为我们编译成真实的代码。获取编译后的代码并确定原始代码是什么样子并不总是可能的。
如果Reflector为了检测这些语法抽象的结果而对代码进行假设,然后Microsoft更改了编译器,那么它将再次崩溃。相反,Reflector似乎选择基于CLR和语言规范进行反编译,这些规范在没有事先通知的情况下较少受到更改的影响。
发布于 2010-08-22 06:10:15
显然,Reflector还没有这个功能。它甚至还没有赶上C# 3.0,更不用说C# 4.0了。只需等待下一个版本(如果会有一个的话)。
https://stackoverflow.com/questions/3539196
复制相似问题