工具: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. nmap使用教程

    Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Network Mapper的简称.Nmap最初是由Fyo ...

  2. 搭建springmvc的步骤

    一定注意文件的层级关系 1.cope相关的jar包到web-inf/lib目录下,并添加到类路径中. 2.配置web.xml文件,配置前端控制器DisPatcherServlet <servle ...

  3. jquery通过name,id名称获取当前value值

    name是input标签的属性值,jQuery提供了attr() 方法用于设置/改变属性值 $("input:text").attr("name");$(&qu ...

  4. submit

    前台<body>中的代码: <body> <div id="top"> </div> <form id="login ...

  5. 十九、Java基础--------IO流之字节流

    在上一篇文章中介绍了IO体系以及一些基本概念和字符流的相关应用,本文着重介绍字节流的相关操作. 字节流 它的操作与字符流类似,可以参与字符流的定义.读取.写入.处理异常的格式,只不过是处理的数据不同, ...

  6. ECStore在Win环境下如何运行CMD命令

    大多数程序员使用windows开发环境来做ECStore二次开发,经常需要使用 ECStore自带的cmd命令进行一些系统操作,如清除缓存(cacheclean),升级程序(update),创建新的a ...

  7. Pandas将中文数据集转换为数值类别型数据集

    一个机器学习竞赛中,题目大意如下,本文主要记录数据处理过程,为了模型训练,第一步需要将中文数据集处理为数值类别数据集保存. 基于大数据的运营商投诉与故障关联分析 目标:原始数据集是含大量中文的xls格 ...

  8. IsBackground的理解

    1.当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的. 2.当主线程退出的时候,IsBackground=FALSE的线程还会继续执行下去,直到线程执行结束. ...

  9. python—面向对象编程

    面向对象编程简单来说就是基于对 类 和 对象 的使用,所有的代码都是通过类和对象来实现的编程就是面向对象编程! 面向对象的三大特性:封装.继承.多态 首先创建一个类 #使用class创建一个Schoo ...

  10. tomcat 大并发报错 Maximum number of threads (200) created for connector with address null and port 8080

    1.INFO: Maximum number of threads (200) created for connector with address null and port 8091 说明:最大线 ...