Что может быть причиной исключения System.TypeLoadException в модульном тесте Visual Studio? - PullRequest
26 голосов
/ 20 апреля 2011

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

Метод тестирования MyClassLibraryTest.MyClassLibraryTests.MySimpleClassTest вызвал исключение: System.TypeLoadException: не удалось загрузить тип «MyClassLibrary.MySimpleClass» из сборки «MyClassLibrary, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = ноль».

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

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

Ответы [ 12 ]

33 голосов
/ 21 февраля 2013

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

25 голосов
/ 09 марта 2013

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

10 голосов
/ 21 апреля 2011

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

4 голосов
/ 11 октября 2011

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

2 голосов
/ 14 июля 2016

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

Характеристики: VS 2013 / .Net 4.0

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

enter image description here

1 голос
/ 23 августа 2018

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

1 голос
/ 11 августа 2017

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

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

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

1 голос
/ 18 ноября 2016

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

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

0 голосов
/ 03 апреля 2019

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

Вы можете найти более подробную информацию по этому вопросу - https://github.com/nunit/nunit-console/issues/424

0 голосов
/ 04 декабря 2018

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

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

...