Модульный тест VisualStudio не находит мою DLL с P / Invoke. Как я могу это исправить?

Я работаю над Windows 7 с Visual Studio 2008.

У меня есть сборка .NET, которая выполняет вызовы собственной библиотеки DLL с помощью P / Invoke. Я создал отдельный проект модульного тестирования .NET в своем решении Visual Studio, который тестирует сборку, выполняя в нее различные вызовы. Однако, когда модульный тест вызывает сборку, а сборка выполняет вызов с помощью P / Invoke, она не может найти собственную DLL.

Когда я пишу автономное консольное приложение .NET, проблем нет. Сборка может использовать P / Invoke и успешно найти DLL.

Я могу заставить модульный тест работать, вызвав LoadLibrary с абсолютным путем к DLL перед использованием сборки. Однако этот подход уродлив и требует абсолютного пути, что будет проблематично для других пользователей.

Короче говоря, у меня вопрос: как я могу указать или изменить путь поиска DLL, который используется при выполнении модульного теста Visual Studio?

Любая помощь будет оценена.

С уважением, Дэн


person Daniel Oberlin    schedule 20.08.2010    source источник


Ответы (3)


Похоже, проблема в том, что ваша собственная DLL не развертывается с вашими DLL модульного тестирования. Это не редкость, поскольку управляемые библиотеки DLL не имеют ссылки на собственные библиотеки в метаданных и, следовательно, пакеты развертывания не знают, как их развертывать.

Наиболее подходящим решением является исправление развертывания, а не изменение путей поиска DLL. Однако это проблема, связанная с модульным тестом. Можете ли вы рассказать нам, какой фреймворк вы используете, чтобы мы могли вам помочь?

person JaredPar    schedule 20.08.2010

Если вы используете интегрированную среду тестирования Visual Studio 2008, вам следует ознакомиться с Класс DeploymentItemAttribute

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

Также см. Как: настроить тестовое развертывание для получения более общей информации о тестовом развертывании VS2008.

person user700390    schedule 09.11.2011

Мое решение заключалось в добавлении команды пост-сборки в мой тестовый проект следующим образом:

xcopy /Y /S "$(SolutionDir)\ShredLibraries\*" "$(TargetDir)"

это объясняется в документах msdn: https://msdn.microsoft.com/en-us/library/ms182475.aspx

person cahit beyaz    schedule 11.03.2016