dotnet资源dll,替换字符串(丢失源代码)

时间:2012-06-07 04:07:31

标签: .net dll

我丢失了一个dotnet 3.5 dll的源代码,它包含了我的所有字符串(html文档)和图像。我现在需要更新其中一个文档和一些图像。我更新文件中的字符串的最佳方式是什么(它们的长度不同,这有关系吗?)

3 个答案:

答案 0 :(得分:1)

直接编辑已编译的程序集是粗略的。我会用decompiler将其反编译回源代码并正确修复它。把它放回源代码控制中。

答案 1 :(得分:1)

步骤#1:拆卸组件。

使用以下命令反汇编您的.net exe或dll:

ildasm /out=assembly_name.il assembly_name.dll

(将assembly_name.dll替换为您的dll或exe名称。)

这将输出大量数据文件。我们对这些感兴趣:

  • *。resources - 二进制资源文件。
  • assembly_name.res - 资源清单。
  • assembly_name.il - 实际的MSIL代码。

步骤2:编辑资源文件。

准备修改后的/新资源,它的名称无关紧要,但格式应与程序集中最初包含的格式相同(例如,替换位图的位图,图标的图标)。

使用资源编辑器编辑资源文件。我使用Resourcer for DotNet(http://www.aisto.com/roeder/dotnet/)来自Lutz Roeder,它是免费软件。顺便说一下,同一作者还编写了Reflector.NET,这是.NET开发人员的一个很棒的工具。

如果您正在使用资源器,则需要执行以下步骤:

  • 打开要更改的.resources文件并重命名原始资源项。
  • 按Ctrl-F插入文件,然后从文件系统中选择修改后的版本。
  • 将新项目重命名为与前一项目具有相同的原始名称(您无法复制/粘贴该项目,因为某些原因它只复制整个项目而不仅仅是文本)。

步骤#3:重新组装组件。

使用以下命令反汇编您的.net exe或dll:

重要提示:这将覆盖原始的dll / exe!

ilasm /resource=assembly_name.res /dll /output=assembly_name.dll /key=signing_key.snk assembly_name.il

(用您的dll或exe名称替换assembly_name.dll,当然如果需要,将/ dll更改为/ exe)。

签名密钥参数是可选的,仅在原始程序集已签名时才需要。

当然,如果它是由其他人签名以防止回火,除非您提供原始签名密钥,否则您将无法使用修改后的程序集,我认为您不会这样做。但这就是.NET的工作原理。

答案 2 :(得分:0)

事实证明,它更容易

使用HEX EDITOR编辑DLL

比起START OVER这是通常的建议。