Почему MSTest не копирует ссылки на библиотеки проектов?

У меня есть решение Visual Studio с проектом DLL С#. Это решение также имеет тестовый проект, который ссылается на вывод проекта С# dll. Ссылка dll, на которую ссылается, имеет значение Copy Local = true.

Если я запустил этот тест из Visual Studio, он отлично работает.

Но если я запустил его из задачи MSBuild, по какой-то причине MSTest не копирует ссылочную С# dll в рабочую папку MSTest, поэтому тест завершается с ошибкой. Странно, что все остальные ссылочные библиотеки копируются в рабочую папку MSTest. И если я поставлю

 [DeploymentItem(@"PleaseCopyThis.dll")]

перед моим тестовым методом, наконец, он скопирован в рабочую папку MSTest, и мой тест проходит нормально.

Но почему Visual Studio копирует только ссылочные dll, которые не являются частью решения, но не копирует ссылочные DLL проекта?

Ответы

Ответ 1

Итак, я нашел эту статью: https://web-beta.archive.org/web/20140803214948/http://www.dotnetthoughts.net:80/mstest-exe-does-not-deploy-all-items/

Кажется самой сложной проблемой.

Потому что у меня была одна и та же проблема, я понял, как ее исправить. В моем случае ссылка dll, где никогда фактически не использовалась непосредственно из тестового проекта (хотя они использовались с использованием отражения). Чтобы решить эту проблему, я добавил тестовый класс со следующим кодом:

[AssemblyInitialize]
    public static void InitializeReferencedAssemblies(TestContext context)
    {
        ObjectInAssemblyX dummy = new ObjectInAssemblyX();
        ObjectInAssemblyY dummy2 = new ObjectInAssemblyY();
    }

Теперь они используются, чтобы они были скопированы