k__BackingField与反编译

 今天反编译umbraco的组件ProWorks Redirect Page v1.03,看到代码中有:
        [CompilerGenerated]
        private string <URL>k__BackingField;

立马汗颜,自己搞C#到现在,也自称不是倒数第一,却没有见过这种形式。马上baidu,释怀!
是反编译的原因!找到一篇很好的文章,转载如下:
《reflector <....>k__BackingField 问题解决方法》

使用 reflector后生成的源代码出现 :

private string <LabelId>k__BackingField;

这样的问题,造成编译失败。

解决方法:

因为菜,所以不能改 reflector ,只好改生成的源代码了,使用.net 的在文件中替换的功能来解决:

1、Ctrl+Shift_H 打开替换窗口;

2、如下图示,使用正则表达式替换;

 k__BackingField与反编译

查找内容:\<{.#}\>k__BackingField

替换内容:_\1_k__BackingField

3、结束。

没办法,懒人就是这个样子,谁让生成的代码里边这种错误这么多呢,要不然也用不着这个方法了。

===============================================================================
goldarch:有网友自己写一段代码,反编译,观察结果如下:
http://topic.csdn.net/u/20090726/16/50060e4f-8255-4706-abe8-455cb51fe2a7.html
CompilerGenerated是反编译生成的代码如
 public class MyClass
  {
  public string Name{set;get;}
  public string Value { set; get; }

  public MyClass(string pName, string pValue) 
  {
  Name = pName;
  Value = pValue;
  }

  }
反编译后
反编译后
public class MyClass
{
  // Fields
  [CompilerGenerated]
  private string <Name>k__BackingField;
  [CompilerGenerated]
  private string <Value>k__BackingField;

  // Methods
  public MyClass(string pName, string pValue)
  {
  base..ctor();
  this.Name = pName;
  this.Value = pValue;
  return;
  }

  // Properties
  public string Name
  {
  [CompilerGenerated]
  get
  {
  string str;
  str = this.<Name>k__BackingField;
  Label_0009:
  return str;
  }
  [CompilerGenerated]
  set
  {
  this.<Name>k__BackingField = value;
  return;
  }
  }

  public string Value
  {
  [CompilerGenerated]
  get
  {
  string str;
  str = this.<Value>k__BackingField;
  Label_0009:
  return str;
  }
  [CompilerGenerated]
  set
  {
  this.<Value>k__BackingField = value;
  return;
  }
  }
}

=============================================
goldarch结论:
形如<URL>k__BackingField只不过就是一"变量命名"!

只不过vs不认这个命名而以,把这个命名改成vs能认的命名就可以了。
PWUrlRedirect代码简短,我直接把<URL>k__BackingField改成 _url,编译通过
需要注意的是:要主动应用"替换"功能,vs自动的替换没有作用(它根本不认为那是变量,不会主动替换的)。

你可能感兴趣的:(Field)