工具:vs2012、.NET Reflector8.1.0.35

要解决的问题:

   通过Reflector反编译生成的代码可以编译通过并显示窗体的本地资源和项目资源图片

一、测试项目

  两个图片分别放在项目资源和窗体的本地资源里

项目资源文件:

 <data name="Chrysanthemum" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Chrysanthemum.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="资源" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\资源.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312</value>
</data>

本地资源文件:

<data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB/+EO5kV4aWYAAE1NACoAAAAIAAQBMgAC
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
</value>

二、Reflector 反编译

在.resources文件上点击右键=》open with=》vs2012 ,就可以在vs里查看资源文件,同时在C:\Reflector\Exports目录下生成.resx文件,如:

C:\Reflector\Exports\ResxDemo.Form1.resources.resx

也可以使用resgen命令生成resx文件

选择ResxDemo项目导出源码在vs2012中打开,这时一般可以编译通过,并能运行。但是打开窗体编辑时会出现错误,提示找不到资源。

反编译后的项目和原项目对比有几点不同:

1. 原项目\Properties\Resources.resx 资源文件没有了,在项目根目录下多出来一个ResxDemo.Properties.Resources.resources文件

2.原项目Form1.resx和Form2.resx资源文件没有了,多出两个.resources文件

3.原项目中有个Resources文件夹存放项目资源的图片,反编译后这个文件夹没有了

4.原项目文件.csproj中资源引用方式是这样的

 <EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form2.resx">
<DependentUpon>Form2.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>

反编译后的是这样的

  <EmbeddedResource Include="ResxDemo.Form1.resources" />
<EmbeddedResource Include="ResxDemo.Form2.resources" />
<EmbeddedResource Include="ResxDemo.Properties.Resources.resources" />

*.resx文件时xml格式的资源描述文件,*.resources文件是编译后的二进制资源文件。

可以运行并显示图片是因为运行时从.resources文件中提取资源,但设计时不能读取二进制文件,所以报下面这样的错误。

类型“ResxDemo.Properties.Resources”没有名为“Chrysanthemum”的属性。 

解决项目资源找不到的问题:

1.使用resgen命令生成Resources.resx文件,拷贝到Properties目录下面

2.从项目中删除ResxDemo.Properties.Resources.resources 和Resource.cs文件

3.把Resource.resx包含在项目中,双击打开,修改访问修饰符为Internal,保存一下就可以自动生成Resource.Designer.cs文件了

重新生成项目,重新打开Form1。可以看见使用项目资源的图片已经显示出来了。

这时使用本地资源的既不报错也不显示,但运行是可以显示出来的,因为现在还是使用的.resources资源文件。

解决本地资源找不到的问题:

1.使用resgen命令生成Form1.resx文件,拷贝到Form1.cs目录下面

2.从项目中删除*.Form1.resources 文件

3.从项目中包含Form1.resx文件,重新生成项目,重新打开窗体图片显示出来了。

Reflector反编译WinForm程序重建项目资源和本地资源的更多相关文章

  1. 恢复Reflector反编译后资源文件的办法

    反编译问题: 1.路径问题:如果遇到了Path.Combine,有错误改下即可 2.资源文件问题: 在Reflector下,对左边的资源管理窗口的Resources文件夹下的资源文件,进行右键点击,选 ...

  2. .NET Reflector反编译的方法

    首先启动.NET Reflector,然后添加进入dll或exe.然后选择Export Source Code...,将反编译后的代码文件,生成到指定目录. 到这一步骤时,稍等一会,就能够在指定目录就 ...

  3. 使用Reflector反编译并提取源代码

    Reflector是一个强大的.net 反编译工具,有时我们不止需要反编译源代码,更需要提取源代码. Reflector本身不自带提取源代码功能,不过可以借助插件Reflector.FileDisas ...

  4. Reflector 反编译 .NET文件后修复

    反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode. ...

  5. Reflector反编译.NET文件后修复【转】

    反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode. ...

  6. 【Android】记录反编译安卓程序步骤

    主要是为了分析一个 App 里面用到的接口,以后移植 UWP 用. 1.http://jd.benow.ca/ 下载 JD-GUI. 2.https://github.com/pxb1988/dex2 ...

  7. Reflector反编译.NET文件后修复

    反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoScaleMode = AutoScaleMode. ...

  8. 通过反编译小程序来学习前端:wxappUnpacker

    小程序开发时,会有4种文件:.wxss  .json  .wxs  .wxml. 正式上传到腾讯时,目录会被打包,使用时再发放给客户端. 这个文件包后缀是 .wxapkg.只要手机用过这个小程序,文件 ...

  9. vs 2019 自带 反编译 与 Reflector 反编译工具比较

    都是一样的 但是要看自己写的 反编译代码 还是得去  Reflector

随机推荐

  1. Unity Tidy Tile Pack #1

    https://www.assetstore.unity3d.com/cn/#!/content/3276 版本: 1.1 下载地址 密码:mt8a

  2. Web动画API教程2:AnimationPlayer和Timeline

    本文转载: Web动画API教程2:AnimationPlayer和Timeline

  3. js __proto 和prototype

    prototype是函数的一个属性(每个函数都有一个prototype属性),这个属性是一个指针,指向一个对象.它是显示修改对象的原型的属性. __proto__是一个对象拥有的内置属性(请注意:pr ...

  4. mongo基本语句

    批量更新 db.test.updateMany({name:'test'},{$set:{value:1}}) 单更新 db.test.update({name:'test'},{$set:{valu ...

  5. JQuery基础二

    1.表单过滤器 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  6. Android APK反编译easy 详解

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  7. Linux应用程序访问字符设备驱动详细过程【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51346532 下面先通过一个编写好的内核驱动模块来体验以下字符设备驱动 可以暂时 ...

  8. Dynamics AX 2012 R2 配置报表服务器

    今天Reinhard在使用报表的过程中,发现以下错误: The default Report Server Configuration ID could not be found in the SRS ...

  9. Codeforces 749C:Voting(暴力模拟)

    http://codeforces.com/problemset/problem/749/C 题意:有n个人投票,分为 D 和 R 两派,从1~n的顺序投票,轮到某人投票的时候,他可以将对方的一个人K ...

  10. 隐式意图Intent

    在我们想往下一个页面传递数据时,要想到显式意图和隐式意图,显示意图用于内部活动跳转时比较方便,而隐式意图用于应用程序中外部活动的跳转时较为方便,在使用隐式意图时我们要想到清单文件 代码如下: < ...