为了支持XP,我的一个项目现在针对.NET 4.0,并将Microsoft.Bcl.Async用于.NET 4.5的异步功能。
问题是,我不再能够使用Dotfuscator(VS 2012随附的专业版或社区版)混淆生成的应用程序。
尝试运行混淆的可执行文件时,程序崩溃,并显示以下错误:
该错误似乎来自Microsoft.Bcl.Async所需的app.config设置,这些设置是:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.5.19.0" newVersion="2.5.19.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
似乎其他人也使用了由供应商修复的different obfuscation software遇到了类似的问题。
有什么我可以解决的吗?还是Dotfuscator的问题? (公平地说,所有麻烦的根源都是微软不支持XP上的.NET 4.5。)
最佳答案
从Dotfuscator版本4.10.2(今天发布)开始,此问题已修复:http://www.preemptive.com/support/dotfuscator-support/dotfuscator-pro-change-log/520
根本原因可追溯到框架的ilasm实用程序存在问题:https://connect.microsoft.com/VisualStudio/feedback/details/801891/ilasm-incorrectly-updates-references-from-mscorlib-to-system-runtime-for-certain-types-when-system-runtime-is-included
如果由于某种原因而无法更新,则在仅安装.NET 4.0的系统上运行混淆处理就足够了。