У меня есть код оболочки С#, который вызывает функции из родной (С++) dll. В настоящее время я могу добавить ссылку на С# dll и установить для параметра "Копировать локальную" значение true. Однако родная dll, которая является зависимой, не может быть добавлена в качестве ссылки, поэтому нет опции "Копировать локальную" .
Я пробовал следующие подходы
-
Использование событий post-build для копирования родной DLL из папки Libs в
$(TargetFolder)
copy "$(ProjectDir)Libs\NQuantLibc.dll" "$(TargetDir)NQuantLibc.dll"
-
Включена родная dll в качестве существующего элемента в проекте (Добавить → Существующий элемент → Включить dll). Этот параметр позволяет мне использовать параметр "Копировать локальный". Недостатком этого подхода является то, что dll всегда отображается как элемент проекта.
Я также попробовал "Показать все файлы", что позволило мне увидеть папку Libs. Затем я включаю файл NQuantLibc.dll в проект, который позволяет мне установить параметр "Копировать локальную" . Однако это дало мне неожиданный результат. Он создал подпапку Libs, содержащую dll в папке bin (например, bin/debug/Libs/NQuantLibc.dll
). Не идеально, поскольку С# dll не смог правильно вызвать родную dll, так как ее там не было.
Оба вышеуказанных варианта выше работают. Есть ли лучшие способы копирования родной DLL в папку bin так, чтобы зависимость всегда была разрешена? Альтернативно, существует ли другой подход к этому типу сценария?