我有一个经常使用.NET程序。 这个程序有一个非常烦人的小错误,应用程序的开发人员无处可寻。
我在反射器中找到了问题的位置,只想在这里添加一个if语句,然后重新编译该程序。
最简单的方法是什么?
我尝试在反射器中使用导出功能,但它似乎并不完美。例如,缺少很多using-directives,并且不能正确导出来回转换为int的枚举。我相信我可以通过一些工作解决这个问题,但我想知道是否有更简单的方法来做到这一点。
更新:解决此问题:
该程序是单个文件可执行文件
完成!我现在只使用固定程序几分钟但它似乎像以前一样工作除了错误:))
我还遇到了应用程序设置的一些问题。在%appdata%\ ProgramName 中,有一个名为 ProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjs 的文件夹,其中存储了所有设置。我的新可执行文件创建了一个这样的新文件夹,最后用不同的随机字母和默认设置。要复制您之前使用的设置,只需将旧文件夹的所有内容复制到新文件夹即可。
答案 0 :(得分:8)
答案 1 :(得分:2)
我认为没有比你刚才提到的更简单的方法。我实际上用ILDASM反编译了一个类似的程序,并且需要进行大量的修改。
如果有一种更简单的方法,我也想知道它。
答案 2 :(得分:2)
您可以使用ILDASM和ILASM进行往返。虽然这对于大的改变是不切实际的,但我认为它应该可以解决你的问题。
答案 3 :(得分:1)
如果程序很简单,理论上你可以使用反射器将整个程序反转回C#,进行更改并重新编译。
或者您可以尝试使用ILDasm之类的工具,它可以让您提取IL,进行更改(在MSIL中),然后重新组合(使用ILAsm)。显然,要做到这一点,你必须弄清楚如何在IL中编写你的变化,所以你可能不得不做一些实验来看看if语句是如何编译的。
我怀疑两者都会花费很多时间来重新编译才能运行。
祝你好运。如果你让它发挥作用,回复并让我知道,我会对你是如何做到这一点非常感兴趣。
答案 4 :(得分:1)
试试这个.NET Reflector addin。
这对我有用。它有时会创建无法编译的“Complier Generated”标签。但您可以轻松手动修复此问题。
答案 5 :(得分:0)
telerik Just Decompile(免费) 然后反射插入
上面的2分钟工作(我已经尝试了所有其他方法!!)