Как отладить ошибки System.TypeLoadException в .NET? - PullRequest
27 голосов
/ 17 апреля 2011

Я получаю следующую ошибку на одной из моих сборок:

Could not load type 'System.Func`2' from assembly 'MyAssembly, ...

Я буду честен, не думаю, что могу вспомнить последний раз, когда яувидел ошибку System.TypeLoadException, или, если я ее увидел, решение было очевидным.Моим первым инстинктом было посмотреть, что MSDN должен был сказать об этом :

Исключение TypeLoadException выдается, когда общеязыковая среда выполнения не может найти сборку, тип внутри сборки или не можетзагрузить тип.

Возможно, я неправильно это читаю, но он говорит, что CLR просто не может найти тип?Это может иметь больше смысла, если это не то, что было в mscorlib.Все это было встроено в .NET4 с VS2010, поэтому нет проблем с моно или другими странными библиотеками.Я слишком обдумываю это?Что происходит?

Ответы [ 7 ]

27 голосов
/ 17 апреля 2011

Проблема в том, что у вас несоответствие в ваших версиях.Убедитесь, что все ваши сборки скомпилированы для .NET 4.

26 голосов
/ 13 марта 2014

Я получил эту ошибку после рефакторинга.У меня было два проекта, компилируемых в библиотеки DLL с одинаковым именем.

Проверьте «Имя сборки» в разделе «Приложение» свойств проекта.

13 голосов
/ 17 апреля 2011

Я не уверен в вашем конкретном сценарии, но средство просмотра журнала привязки сборки (fuslogvw) обычно очень полезно при отладке проблем загрузки типов.Больше информации на http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

3 голосов
/ 05 ноября 2015

Вы также можете получить это, если вы измените сборку, которую пытаетесь загрузить, но у вас все еще есть старая версия в GAC. Он пытается загрузить версию GAC, а не ту, на которую вы ссылаетесь в своем проекте VS.

1 голос
/ 30 июля 2014

Я получил эту ошибку, когда переместил класс из одного проекта в другой в процессе очистки.Изучив все другие возможные причины, перезагрузите каждый из проектов в моем решении, и все заработало.

  1. Щелкните правой кнопкой мыши имя проекта в обозревателе решений
  2. Выберите «Выгрузить проект»
  3. Щелкните правой кнопкой мыши имя проекта в обозревателе решений
  4. Выберите Перезагрузить проект
0 голосов
/ 25 марта 2019

Эта проблема может возникнуть, если в разных проектах установлены разные версии пакетов NuGet. Чтобы выявить эти случаи,

  1. Щелкните правой кнопкой мыши решение в обозревателе решений и выберите «Управление пакетами Nuget для решения»
  2. Выберите вкладку «Консолидация»
  3. Для всех идентифицированных пакетов укажите нужную версию и нажмите «Установить», чтобы объединить пакет с этой версией.
0 голосов
/ 15 сентября 2017

Я столкнулся с этим исключением, когда я рефакторинг переместил некоторые классы в их собственную библиотеку и сослался на другую версию библиотеки, которую он пытается загрузить в новую библиотеку (приобретенную с NuGet), чем я использовал в исходном проекте.

Исправлена ​​ошибка, состоящая в том, чтобы открыть диспетчер NuGet в старом проекте и обновить соответствующий пакет до той же версии, которую я использовал в моей новой библиотеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...