2013-06-20 6 views
0

При попытке открыть мой Windows Forms приложение (я буду называть его MyApplication.exe) на машине, кроме моего Dev машины, диалоговое окно, говоря:Как диагностировать «System.TypeLoadException» ошибка


MyApplication перестал работать

Окна можно проверить онлайн для решения задачи

  • Проверить онлайн для решения и закрыть программу
  • Закройте программу

Подробности

Сигнатура проблемы:

Problem Event Name: CLR20r3 
    Problem Signature 01: myapplication 
    Problem Signature 02: 1.2.0.0 
    Problem Signature 03: 51c34395 
    Problem Signature 04: mscorlib 
    Problem Signature 05: 4.0.0.0 
    Problem Signature 06: 50484bd7 
    Problem Signature 07: 1204 
    Problem Signature 08: 89 
    Problem Signature 09: System.TypeLoadException 
    OS Version: 6.1.7600.2.0.0.256.48 
    Locale ID: 1033 
    Additional Information 1: 0a9e 
    Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 
    Additional Information 3: 0a9e 
    Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 

Важно отметить, что я использую ILMerge объединить MyApplication.exe и ссылку MyLibrary.dll сборок в одну сборку (название выхода MyApplication.exe).

Кроме того, важно отметить, что тестовые машины могли запускать .exe без проблем, пока я не выпустил обновление, которое добавило extension method в проект MyApplication.

Другими словами, после того, как я добавил метод расширения для MyApplication, затем используется ILMerge объединить .exe и .dll, то испытательные машины будут получать вышеуказанную ошибку (Интересно, что мой DEV машина может работать слитый EXE-файл с Нет проблем).

Есть ли известная проблема с методами ILMerge и Extension? Это звучит странно, но это единственное, что изменилось в моем коде.

Поскольку я не могу воспроизвести проблему на своей машине dev, есть ли у вас какие-либо советы относительно того, как я могу найти решение проблемы с ошибкой , которая возникает на тестовых машинах?

System Info

  • Таргетинг .NET Framework 4.0 (все мои тестовые машины это установлено)
  • ILMerge Версия 2.12.803
  • Dev машины: Windows 2008 Server R2; Visual Studio 2010 Pro
  • Клиентские машины: XP, Win7 и Win8 (все из них получают ошибку)
+0

Какая версия платформы .NET делают клиентские машины установили? Это 3.5 или даже версия клиента? – ChrisF

+0

Все они имеют установленный 4.0 – Jed

+0

на вашей машине для сборки .net 4.5 установлен? –

ответ

1

Если у вас есть .net 4.5, установленный на вашем компьютере сборки, это нарушило бы, если вы не будете осторожны.

В основном Microsoft изменилась, где был найден 1 атрибут (от System.Core до mscorlib).

Мэтт Врок в his post объясняет, как обходить его с помощью ILMerge.Хотя это для бета-версии, она должна работать с релизом.

+0

У меня возникла такая же проблема. Я добавил 1 метод расширения и построил таргетинг 4.0 на машине с установленным 4.5. Такое исключение загрузки типа даже без использования слияния IL. Удаление метода расширения решило проблему. –

1

Matt Wrocks post (спасибо @Daniel White для этого) имел информацию, которую я искал. Однако путь/targetplatform, который он задает, не работает для меня.

Вместо пути Wrocks

/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" 

Я должен был использовать

/targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" 

 Смежные вопросы

  • Нет связанных вопросов^_^