Что может быть причиной исключения System.TypeLoadException в модульном тесте Visual Studio?

У меня есть библиотека классов C# .NET MyClassLibrary, которая прекрасно компилируется. Я пытаюсь создать для него проект модульного тестирования (с использованием Visual Studio Unit Testing Framework, с Visual Studio 2010). В библиотеке классов есть большие классы, но всякий раз, когда я запускаю даже самый простой тест для самого простого класса, я получаю следующее исключение:

Тестовый метод MyClassLibraryTest.MyClassLibraryTests.MySimpleClassTest вызвал исключение: System.TypeLoadException: не удалось загрузить тип 'MyClassLibrary.MySimpleClass' из сборки 'MyClassLibrary, Version=1.0.0.0, Culture= нейтральный, PublicKeyToken=null.

Все проекты, с которыми я имею дело, находятся в одном решении, и все они скомпилированы для.NET 4.0. Все это на 64-битной машине с Windows 7.

Вот странная часть: когда я " запускаю " тест, я получаю вышеуказанную ошибку. Но когда я " отлаживаю " тест, он работает нормально. Зачем?

14 ответов

Решение

Сборка MyClassLibrary была установлена ​​в режим x86 в менеджере конфигурации. Изменение этого на x64 исправило это. Мне бы очень хотелось, чтобы Visual Studio обнаружила это и сообщила об этом как о менее скрытой ошибке

Я просто ударился головой об это в течение часа. Проблема заключалась в том, что у меня был проект командной строки с именем Something.exe, который использовал проект библиотеки классов с именем Something.dll.

Случилось и со мной тоже. В моем случае проблема возникла потому, что тестируемый проект и проект модульных тестов имели одно и то же имя. Если это также ваш случай, переименуйте один из проектов и переименуйте имя выходного файла, чтобы исправить это.

Случилось и со мной тоже. Это связано со сборкой для x64, Release и x86 mode. В моем случае я удалил папки в моей корзине (debug/release/x86 в ссылочных сборках и модульном тесте) и повторно запустил мой модульный тест. VS2010 несколько сообщил об ошибке в окне вывода. Это решило это для меня.

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

Моё основное имя проекта было: Calculator.OperationsManager. Имя моего тестового проекта было: Calculator.OperationsManager.

я изменил название тестового проекта как Calculator.OperationsManager.Test и все прошло хорошо.

Прошел через это сегодня, и хотя я бы оставил свое решение.

Спецификации: VS 2013 / .Net 4.0

Решение: Перейдите в Меню> Тест> Настройки теста> Архитектура процессора по умолчанию> X64

введите описание изображения здесь

То же самое сообщение здесь, но я также не смог отладить тест.

В моем случае DLL, которую я тестировал, была развернута в GAC (требование BizTalk). Я создал новый класс и тестировал его, но с тех пор, как добавил тестируемый класс, GAC больше не выполнял DLL.

В случае, если это помогает другим с той же ошибкой (я понимаю, что это не дает прямого ответа на вопрос "Выпуск против Отладки"); Я объединился в устаревшем проекте с пространством имен, которое конфликтовало с существующим, поэтому переименовал его. Я получил эту ошибку при попытке создать форму из этого проекта.

Я проверил, что цель платформы была такой же, и удалил каталоги.\ Bin\, чтобы гарантировать чистую перестройку, удалил ссылку на объединенный проект и повторно добавил его, но все еще та же ошибка.

В конце концов (!) Я проверил Имя сборки в свойствах проекта (щелкните правой кнопкой мыши по проекту, выберите "Свойства", выберите вкладку "Приложение") и изменил его, чтобы оно соответствовало пространству имен по умолчанию, и теперь все в порядке.

У меня была такая же проблема, как у Trey, но вместо BizTalk у меня есть решение SharePoint, которое также использует развертывание GAC. GAC имел более старую сборку. Когда я удалил сборку GAC, убрав решение, испытание прошло.

Столкнулся с той же проблемой. На всякий случай, если это кому-нибудь поможет - мне удалось заставить его работать, понизив пакет nuget NUnit3TestAdapter с версии 3.13.0 до 3.11.2.

Вы можете найти больше информации об этом - https://github.com/nunit/nunit-console/issues/424

В моем случае запутанный код вызвал проблему. Я отключил обфускацию кода и решил проблему.

Это случилось и со мной. В моем доменном проекте был установлен пакет nuget с версией 1.5, но в моем проекте модульного тестирования была только версия 1.1. Я решил проблему, обновив версию в проекте модульного тестирования, чтобы она соответствовала версии в доменном проекте (с тестируемым проектом).

На всякий случай: кому-то это нужно: я создал тестовый проект в Visual Studio и удивился, почему некоторые классы не могут быть найдены, даже если Visual Studio неоднократно просила меня добавить "System.Web" в качестве ссылки.

Я сделал это, и ошибка продолжала происходить. Проблема для меня была проста (и я должен был проверить это раньше, я знаю): я создал тестовый проект из шаблона, который создал проект.NET Core. После изменения его на.NET Framework 4.6.1 и добавления "System.Web" в качестве ссылки все работало нормально.

У меня была эта ошибка с использованием NUnit 3 в VS 2013. Я решил ее, удалив ссылку на сборку в своем тестовом проекте для сборки, которая содержала тип, который не был найден, а затем повторно добавил ссылку.

Другие вопросы по тегам