zoukankan      html  css  js  c++  java
  • 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

    替换内容:_\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自动的替换没有作用(它根本不认为那是变量,不会主动替换的)。

  • 相关阅读:
    如何用 Gerrit 提交代码到服务器
    营收奇迹:三消游戏Candy Crush Saga成功启示录
    flash进阶之路
    Flash笔记之swf居中和swf获取页面参数游戏全屏显示
    如何做一款成功的APP应用
    演义群侠扫盲
    笔记二 air android处理用户交互
    可以准备很多字体,玩家选择性下载
    AIR中调用exe或者bat可执行文件
    很好用的工具类
  • 原文地址:https://www.cnblogs.com/goldarch/p/2027071.html
Copyright © 2011-2022 走看看