Невозможно использовать Dotfuscator с приложением, ссылающимся на Microsoft.Bcl.Async

Для поддержки XP один из моих проектов теперь нацелен на .NET 4.0 и использует Microsoft.Bcl.Async для асинхронных функций .NET 4.5.

Проблема в том, что я больше не могу запутывать полученное приложение с помощью Dotfuscator (ни с профессиональной версией, ни с версией сообщества, включенной в VS 2012).

При попытке запустить запутанный исполняемый файл программа вылетает со следующей ошибкой:

Не удалось загрузить тип «System.Object» из сборки «System.Runtime, версия = 2.5.19.0».

Эта ошибка, по-видимому, возникает из-за настроек app.config, необходимых для Microsoft.Bcl.Async, а именно:

<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? (Ну, если честно, все проблемы на самом деле связаны с тем, что Microsoft не поддерживает .NET 4.5 на XP...)


person Bob Smith    schedule 16.05.2013    source источник
comment
Хм... интересно. Я не знал, что библиотека Bcl.Async работает таким образом. Я должен попробовать это и посмотреть, смогу ли я найти обходной путь и/или зарегистрировать ошибку внутри компании.   -  person Earlz    schedule 17.05.2013
comment
Я больше не могу запутать полученное приложение с помощью Dotfuscator. Можете ли вы запустить полученное приложение в Windows XP (не на машине с .NET4.5/VS2012) без запутывания?   -  person Gennady Vanin Геннадий Вани&    schedule 17.05.2013
comment
@ Геннадий-Ванин - Да, приложение отлично работает на XP и других версиях Windows до запутывания, но после запутывания оно не работает ни на одной машине.   -  person Bob Smith    schedule 17.05.2013
comment
@Earlz Спасибо за помощь!   -  person Bob Smith    schedule 17.05.2013


Ответы (1)


Эта проблема устранена в 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.

person mletterle    schedule 27.09.2013