Запутанный заголовок, запутанный вопрос, но я надеюсь, что смогу привлечь ваше внимание.Кстати:
У меня есть решение VS с тремя проектами.
- Project1 : Собственная оболочка взаимодействия DLL, которая импортирует Native.dll .
- Project2 : AПроект WinForms, который выполняет вызовы оболочки, содержащейся в Project1.
- 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], оно игнорирует правило копирования.