反编译с#代码显示错误

问题描述:

我已反编译C#DLL,现在无法编译它。它显示了奇怪的错误,例如在某些开关块中,某些情况下块没有它们的break语句,或显示“不能将int转换为bool”等错误。但是对于这个大小的DLL,错误的数量并不是很大,所以我认为这不是反编译器的问题。反编译с#代码显示错误

编译器(例如,生活中不安全的东西)会对解决这个问题有一些影响吗?或者为什么会出现这种奇怪的错误?

P.S.该DLL没有被破坏 - 应用程序现在正在使用它。我正在使用dotPeek进行反编译,并使用Visual Studio 15编译结果代码。

+0

http://*.com/a/15555859/4767498 –

+0

反编译器从来都不是完美的。而dotPeek肯定在不完美的反编译器类别中占据领先地位。它们主要是为了帮助诊断第三方库中的意外行为。并推广该公司的其他工具,实际上带来了金钱。侵犯他人的版权不在功能列表之上。 –

+2

@HansPassant反编译一个你没有源代码的DLL并不一定意味着它侵犯了版权。 – Rob

将IL反编译为C#非常困难,而且反编译器可能做错了什么。根据我的经验,反编译和编译代码的行为也可能与原始程序集不同,因此请注意。而这样的编译错误可能是dotPeek不确定的错误,所以想想它应该做什么或在IL中查找。

如果您愿意对程序集进行非常小的编辑(注入方法调用,公开某些内容),直接在IL中通过ildasm获取它可能会更安全。

对于这样的错误,如:

"Can not cast int to bool" 

绝对没有任何编译器指令,让你的编译器继续前进,我认为你的反编译搞砸了反编译的东西......你可以简单地与其他尝试反编译器,看看你是否得到另一个结果,有效的替代方案是:ILSpy,JustDecompileDotnet IL Editor

要知道,一些商业DLL进行模糊处理只是为了尝试过不去的反编译和反编译谁...

要小心,以避免破坏一些版权。