我已经反编译了C#dll,现在无法编译它。它显示了奇怪的错误,例如在某些开关块中,某些case块没有break语句,或者显示“无法将int转换为bool”等错误。但是对于那个大小的dll,错误的数量不是很大,所以我认为这不是反编译器的问题。
是否存在一些可以解决此问题的编译器(例如,生活不安全)的一些derective?或者为什么会出现这样的奇怪错误?
P.S。 dll没有被破坏 - 应用程序正在使用它。我正在使用dotPeek反编译和Visual Studio 15来编译结果代码。
答案 0 :(得分:1)
对于如下错误:
"Can not cast int to bool"
绝对没有编译器指令允许你的编译器继续进行,我认为你的反编译器搞砸了一些反编译...你可以简单地尝试使用另一个反编译器,看看你是否得到了另一个结果,有效的替代方案是:{ {3}},ILSpy和JustDecompile。
请注意,某些商业DLL被混淆只是为了让反编译器和反编译器的生活变得困难......
小心避免破坏某些版权。
答案 1 :(得分:0)
将IL反编译为C#非常困难,而反编译器可能做错了。根据我的经验,反编译和编译的代码也可能与原始程序集的行为不同,因此请注意。这样的编译错误可能是dotPeek不确定的,所以想想它应该做什么或者看看IL。
如果你愿意对程序集进行非常小的编辑(注入方法调用,公开一些东西),那么在ildasm
获得的IL中直接执行它可能更安全。