Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net dotnet资源dll,替换字符串(丢失的源代码)_.net_Dll - Fatal编程技术网

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

.net dotnet资源dll,替换字符串(丢失的源代码),.net,dll,.net,Dll,我的源代码丢失到了一个Dotnet3.5DLL,它保存了我所有的字符串(html文档)和图像。我现在需要更新其中一个文档和一些图像。对我来说,更新文件中字符串的最佳方法是什么(它们的长度会不同,这有关系吗?直接编辑已编译的程序集是粗略的。我会将它反编译成源代码,并修复它正确。也将其放回源代码管理。直接编辑已编译的程序集是粗略的。我会将它反编译成源代码,并修复它正确。把它也放回源代码管理中。这样更容易实现 使用十六进制编辑器编辑DLL 而通常的建议是重新开始。因此,重新开始更容易 使用十六进制编辑

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

直接编辑已编译的程序集是粗略的。我会将它反编译成源代码,并修复它正确。也将其放回源代码管理。

直接编辑已编译的程序集是粗略的。我会将它反编译成源代码,并修复它正确。把它也放回源代码管理中。

这样更容易实现

使用十六进制编辑器编辑DLL


而通常的建议是重新开始。

因此,重新开始更容易

使用十六进制编辑器编辑DLL

通常建议重新开始。

步骤#1:拆卸总成。 使用以下命令反汇编.net exe或dll:

ildasm /out=assembly_name.il assembly_name.dll
(用dll或exe名称替换程序集_name.dll)

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

  • *.resources-二进制资源文件
  • assembly_name.res—资源清单
  • assembly_name.il—实际的MSIL代码
第2步:编辑资源文件。 准备修改的/新的资源,不管它是什么名称,但格式应与程序集中最初包含的格式相同(例如,将位图替换为位图,将图标替换为图标)

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

如果您正在使用Resourcer,以下是所需的步骤:

  • 打开要更改的.resources文件并重命名原始资源项
  • 点击Ctrl-F插入文件并从文件系统中选择修改后的版本
  • 重命名新项目,使其具有与前一个项目相同的原始名称(您无法为此复制/粘贴,因为某些原因,它只复制整个项目,而不只是文本)
步骤3:重新组装组件。 使用以下命令反汇编.net exe或dll:

ildasm /out=assembly_name.il assembly_name.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的工作原理。

步骤1:拆解组件。 使用以下命令反汇编.net exe或dll:

ildasm /out=assembly_name.il assembly_name.dll
(用dll或exe名称替换程序集_name.dll)

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

  • *.resources-二进制资源文件
  • assembly_name.res—资源清单
  • assembly_name.il—实际的MSIL代码
第2步:编辑资源文件。 准备修改的/新的资源,不管它是什么名称,但格式应与程序集中最初包含的格式相同(例如,将位图替换为位图,将图标替换为图标)

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

如果您正在使用Resourcer,以下是所需的步骤:

  • 打开要更改的.resources文件并重命名原始资源项
  • 点击Ctrl-F插入文件并从文件系统中选择修改后的版本
  • 重命名新项目,使其具有与前一个项目相同的原始名称(您无法为此复制/粘贴,因为某些原因,它只复制整个项目,而不只是文本)
步骤3:重新组装组件。 使用以下命令反汇编.net exe或dll:

ildasm /out=assembly_name.il assembly_name.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的工作原理。

基本上意味着您不应该这样做,或者很难在合理的时间内正确完成。我的观点是:不要试图编辑二进制程序集;将它们反编译成您可以正常使用的源代码。通常是ish。我正在评估是否更容易从dotnet诞生之初就使用这个古老的dll,只需编辑一个需要更改并再次保存的小东西,或者从头开始重新构建它(我所看到的大多数反编译器都要求我这样做——它们向我展示代码,但我必须手动重新构建)。这需要钱。基本上意味着你不应该这样做,或者在合理的时间内很难正确完成。我的观点是:不要尝试编辑二进制程序集;将它们反编译到你可以正常使用的源代码中。通常是ish。我正在评估在这个年龄是否会更容易从dotnet诞生之初就有了旧的dll,只需编辑一个需要修改并再次保存的小东西,或者从头开始重新构建它(这是我见过的大多数反编译器)