Interop, Native DLL и Visual Studio процесс сборки - PullRequest
8 голосов
/ 28 марта 2012

Запутанный заголовок, запутанный вопрос, но я надеюсь, что смогу привлечь ваше внимание.Кстати:

У меня есть решение VS с тремя проектами.

  1. Project1 : Собственная оболочка взаимодействия DLL, которая импортирует Native.dll .
  2. Project2 : AПроект WinForms, который выполняет вызовы оболочки, содержащейся в Project1.
  3. Project3 : Проект MSTest, который выполняет вызовы оболочки, содержащейся в Project1 Project2.

Я включил Native.dll в Project1 и настроил его для копирования в выходную папку.

Эта настройка приведет к сбою DllImport, сказав, что целевой DLL не может быть найден.Причина проста.Я использую Project 2 или 3, и в каждом случае:

  • Project2: при сборке он копирует Project1.dll, сгенерированный процессом сборки, но НЕ копирует Native.dll,Когда код выполняется, папка $ ProjectDir \ bin \ Debug (или выпуск) и Native.dll недоступны.

  • Project3: это проект MSTest;Когда его просят запустить все тесты, он компилирует приложение и копирует выходные файлы exe и dll в выходную папку.Однако это не копирует Native.dll.

В обоих примерах DLL копируется в папку отладки Project1, что бесполезно.

Есть простой способ исправить этот проект? Проще говоря, я хотел бы избежать использования Post Build для копирования или другого ручного процесса.Я также хотел бы попытаться избежать использования абсолютного пути для копирования .dll.

Я использую Visual Studio 2010.

Спасибо!

ОБНОВЛЕНИЕ: В приведенном выше сценарии было указано, что Project3 ссылается на Project1, а это не так.Project3 ссылается на Project2, который ссылается на Project1.В этом случае файл Native.dll копируется в выходную папку Project2, но не в выходную папку Project3.Я также добавил Project4, типа библиотеки классов, добавил ссылку на Project2, и он также не копирует.

Другими словами, если в проекте P [A] есть элемент X с правилом «копировать в вывод» и P [B] ссылается на него, P [B] также копирует X. Однакоесли a P [C] ссылается на P [B], оно игнорирует правило копирования.

1 Ответ

5 голосов
/ 28 марта 2012

Добавьте ссылку на 'Native.dll' в вашем проекте. В окне свойств файла установите для параметра «Действие сборки» значение «Нет», а для параметра «Копировать в выходной каталог» - «Всегда» или «Копировать, если новее»

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...