0

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

4

3 回答 3

3

步骤#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:编辑资源文件。

准备修改的/新的资源,不管它的名字是什么,但格式应该与最初包含在程序集中的格式相同(例如,将位图替换为位图,将图标替换为图标)。

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

如果您使用的是 Resourcer,则需要执行以下步骤:

  • 打开要更改的 .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

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

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

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

于 2014-07-16T07:52:43.827 回答
1

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

于 2012-06-07T04:17:24.870 回答
0

So it turns out that it's easier to

EDIT THE DLL WITH A HEX EDITOR

than it is to START OVER which is the usual advice.

于 2012-06-07T06:38:55.497 回答