Как заставить развертывание библиотеки P / Invoked C ++ вместе с тестами C #, которые я запускаю с VS Test Explorer? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь создать модульный тест для библиотеки C #, которую можно запустить через стандартный интерфейс Test Explorer в Visual Studio 2019. Точная среда, такая как xUnit или NUnit, не имеет значения (хотя я бы предпочла использовать тот, который поставляется с VS по умолчанию, чтобы другим людям было легче участвовать в проекте). Проблема в том, что библиотека P / вызывает некоторый код C ++ из другого проекта, от которого она зависит.

Это всегда приводит к ошибкам, таким как Message: System.DllNotFoundException : Unable to load DLL 'CppImplementation.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Похоже, проблема в том, что при запуске через [Тест] -> [Выполнить] -> [Все тесты] полностью игнорируются параметры рабочего каталога для любого из проектов и где-то развертывается тесты перед их выполнением. C ++ dll не развертывается, поэтому в дальнейшем код нигде не будет найден.

Я вызываю методы C ++ из C # следующим образом:

[DllImport("CppImplementation.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private static extern int someFunction();

Я попытался создать файл .testsettings в решении и установить его как активный. Там я проверил «Включить развертывание» и добавил скомпилированный файл C ++ .dll в список «Дополнительные файлы и каталоги для развертывания» (что уже выглядит странно, потому что не похоже, что я могу настроить этот список для каждой конфигурации, и я бы предпочитаю развернуть правильную версию, но сейчас я был бы рад заставить ее работать хотя бы в одной).

Кажется, это никак не влияет. .Dll никуда не копируется, и все тесты все равно не могут его найти.

Я ищу способ форсировать развертывание или, может быть, каким-то образом перенастроить тесты, чтобы они все-таки поступили правильно. Чем ближе это к «обычному способу сделать это в VS2019», тем лучше, в силу характера проекта.

...