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

14

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

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

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

<code> [DeploymentItem(@"PleaseCopyThis.dll")]
</code>

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

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

Ты когда-нибудь находил решение для этого? amaters
Нет, я только что оставил этот конкретный тест с DeploymentItem. Возможно, что-то не так с этим тестовым проектом, он был импортирован в VS 2010 из VS 2008. JustAMartin
У меня была точно такая же проблема. Мы загружаем много dll динамически, и ни один из них не копируется при запуске MSTest. Лучшее решение, которое я видел, это просто добавить их в качестве элемента развертывания. David Sacks

Ваш Ответ

1   ответ
14

https: //web-beta.archive.org/web/20140803214948/http: //www.dotnetthoughts.net: 80 / MSTest-ех-делает-не-Deploy-все-элементов /

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

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

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

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

@ Stafford Williams Вы должны определить атрибут размещения для каждого метода. Вот почему вам нужно создать его экземпляр один раз для всей сборки. Fabian
Какая выгода от использования ОП в DeploymentItemAttribute? Stafford Williams
@ Fabian нет, нет, просто поместите его выше одного объявления класса, и элемент будет скопирован Stafford Williams

Похожие вопросы