Поскольку тестовые проекты являются просто расширениями производственного кода, нередко имеют одни и те же зависимости. В некоторых случаях исключение зависимости может скомпилироваться нормально, но завершится неудачно, когда тестируемый код попытается загрузить отсутствующую зависимость во время выполнения (как вы обнаружили). Однако если ваши тесты должны использовать зависимость в коде теста, вы обнаружите, что не сможете скомпилировать без ссылки на эту зависимость.
Также имейте в виду, что при выполнении TestRun с помощью MSTest копирование сборок выполняется не процессом компиляции, а этапом посткомпиляции, который копирует зависимости для тестов в специализированную папку «test run», обычно TestResults . Visual Studio поддерживает функцию под названием « Test Deployment », которая может копировать дополнительные тестовые данные и т. Д. В тестовый прогон.
Другим элементом, играющим здесь, может быть динамическая композиция MEF. Одним из ключевых преимуществ MEF является то, что он следует модели плагинов, которая динамически загружает сборки в ваше приложение во время выполнения: просто добавьте новые сборки, и MEF подберет их. Таким образом, распространено, что дизайн основного приложения не будет иметь прямых ссылок на эти динамически загруженные сборки. Если вы используете MEF в своих тестах для динамической загрузки тестов, эти тесты должны быть скопированы (используя Test Deployment) или упомянуты как часть тестового проекта.