4

为了支持 XP,我的一个项目现在以 .NET 4.0 为目标,并将 Microsoft.Bcl.Async 用于 .NET 4.5 的异步功能。

问题是,我不再能够使用 Dotfuscator 混淆生成的应用程序(无论是专业版还是 VS 2012 中包含的社区版)。

尝试运行经过混淆的可执行文件时,程序崩溃并出现以下错误:

无法从程序集“System.Runtime”加载类型“System.Object”,版本 = 2.5.19.0

该错误似乎来自 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>

似乎其他人使用由供应商修复的不同混淆软件遇到了类似的问题。

我能做些什么来解决这个问题吗?或者这是 Dotfuscator 的问题?(公平地说,所有的麻烦都源于微软在 XP 上不支持 .NET 4.5……)

4

1 回答 1

2

从 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-包含某些类型的系统运行时

如果由于某种原因您无法更新,那么在仅安装了 .NET 4.0 的系统上运行混淆也应该足够了。

于 2013-09-27T15:05:24.843 回答