我有一个我经常使用的程序,它是用 .NET 制作的。
该程序有一个非常烦人的小错误,并且无处可找到该应用程序的开发人员。
我已经在反射器中找到了问题的位置,只想在这里添加一个 if 语句,然后重新编译程序。
什么是最简单的方法来做到这一点?
我曾尝试在反射器中使用导出功能,但它似乎工作不完美。例如,缺少许多 using 指令,并且来回转换为整数的枚举也没有正确导出。我相信我可以通过一些工作来解决这个问题,但我想知道是否有更简单的方法来做到这一点。
更新:通过这样做解决它:
该程序是单个文件可执行文件
完毕!我现在只使用了几分钟的固定程序,但它似乎和以前一样工作,除了错误:)
我还遇到了应用程序设置的一些问题。在 %appdata%\ProgramName 中有一个名为 ProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjs 之类的文件夹,其中存储了所有设置。我的新可执行文件创建了一个像这样的新文件夹,末尾有不同的随机字母和默认设置。要复制您之前使用的设置,只需将旧文件夹的所有内容复制到新文件夹即可。
最佳答案
如果程序很简单,理论上你可以使用反射器将整个程序反转回C#,进行更改并重新编译它。
或者,您可以尝试使用类似 ILDasm 的工具,它应该允许您提取 IL,进行更改(在 MSIL 中)并重新组装(使用 ILAsm)。显然,要做到这一点,您必须弄清楚如何在 IL 中编写更改,因此您可能需要进行一些试验以查看 if 语句如何编译。
我怀疑两者都需要相当多的困惑才能使重新编译工作。
祝你好运。
如果你让它起作用,请回帖并告诉我,我会对你是如何做到的很感兴趣。
关于.net - 修复 .NET 程序中的错误,无需访问源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1518891/