Что может быть причиной исключения 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. Я решил ее, удалив ссылку на сборку в своем тестовом проекте для сборки, которая содержала тип, который не был найден, а затем повторно добавил ссылку.