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

反编译问题:

1.路径问题:如果遇到了Path.Combine,有错误改下即可

2.资源文件问题:

在Reflector下,对左边的资源管理窗口的Resources文件夹下的资源文件,进行右键点击,选中"Save as" 选项保存即可。

例:对于项目文件夹里面的TryAssemb.Form1.resx,首先改为Form1.resx然后移动到TryAssemb目录里面

3.对窗体打开"视图设计器",发现会出现下面的错误:

修改方法就是对所有System.Windows.Forms.命名空间里面的控件需要全命名空间的声明,

例如里面 base.AutoScaleMode = AutoScaleMode.Font;就要改成base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

而TextBox textBox1; 也要改成private System.Windows.Forms.TextBox textBox1;这样VS就能识别到这个控件是要绘制在Form上面的

4.委托和回调函数问题

一般会被还原为add_Xxx(MethodsName)方法,需要改为 += MethodsName

5.命名空间问题

如果需要切换到IDE的窗体设计器,而不出错,则还需要在*.cs中添加比如System.Windows.Forms的命名空间前缀。

6.窗体设计器识别问题

需要把以下代码
ComponentResourceManager manager = new ComponentResourceManager(typeof(ClassName));
替换为
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ClassName));
窗体设计器才能正常识别。

资源文件小工具

https://www.cnblogs.com/cgli/archive/2011/04/28/2032262.html

其他转换方法(未试过):

https://ask.csdn.net/questions/258576?ref=myrecommend

 1.资源文件格式转换,将.resources(二进制)文件转成.resx文件(XML)
  用Program FilesMicrosoft Visual Studio .NET 2003SDKv1.1Bin下 resgen.exe
  格式: resgen *.resources *.resx(.resx文件最好与窗体.cs文件同名)

  参见:
  http://www.microsoft.com/china/community/program/originalarticles/techdoc/how_resourcefile.mspx

2.将InitializeComponent方法中的对象manager替换为resources(没错,只替换变量名^_^)
3.将资源文件.resx放到窗体文件.cs相同的文件夹下。
4.将所有窗体(.cs)从工程中排除,再添加(这样可以省去将.resx文件映射到.csproj的过程)。

resx文件和cs文件自动关联的工具解决方法

 https://www.cnblogs.com/bffox/p/3373887.html

在反编译程序资源例如reflector中,我们常碰到resx文件和cs源代码文件分离的问题,终极解决方法是修改项目csproj文件,手工修改其架构,但碰到大量的就需要使用正则表达式替换,然后在vs中重新全部加载。

第一种解决方法,点击需要关联的cs文件,然后通过项目菜单中添加新项,选择resx文件,则会自动关联,这适用于单一文件,不适合大批量关联。

第二种解决方法,简单修改项目文件。

打个比方,在项目文件中,原来是

1
<EmbeddedResource Include="DZJ.LSSK.StockfrmStockModify.resx" />

我们只要修改为:

<EmbeddedResource Include="DZJ.LSSK.StockfrmStockModify.resx" >
<DependentUpon>frmStockModify.cs</DependentUpon>
</EmbeddedResource>

  第三种方法来源于第二种方法,适合批量。首先要将resx文件放到cs相同目录下,并且同名,方法网上多得是,就不在这里啰嗦了;其次没必要使用原有的ResXFileCodeGenerator工具

这里举两种情况,一种情况是同在根目录,第二种情况是都在子目录,下面的表达式是都在二层子目录,第一种情况参看代码修改:

正则表达式为将

1
<EmbeddedResourcesInclude="([^"]*)\([^"]*).resx"s/>

替换为 

1
2
3
<EmbeddedResource Include="$1\$2.resx">
<DependentUpon>$2.cs</DependentUpon>
</EmbeddedResource>

  收工。自己用的时候根据情况不同一定要先测试,后果自负。

原文地址:https://www.cnblogs.com/xcsn/p/4678358.html