Как заставить Visual Studio скопировать DLL-файл в выходной каталог?


У меня есть проект Visual Studio C++, который опирается на внешний DLL-файл. Как заставить Visual Studio автоматически скопировать этот DLL-файл в выходной каталог (debug/release) при сборке проекта?

4 87

4 ответа:

используйте действие после сборки в своем проекте и добавьте команды для копирования нарушающей DLL. Действия после сборки записываются в виде пакетного сценария.

на выходной каталог можно ссылаться как $(OutDir). Каталог проекта доступен как $(ProjDir). Попробуйте использовать относительные пути, где это применимо, чтобы вы могли скопировать или переместить папку проекта, не нарушая действие после сборки.

$(OutDir) оказался относительным путем в VS2013, поэтому мне пришлось объединить его с $(ProjectDir) для достижения желаемого эффекта:

xcopy /y /d  "$(ProjectDir)External\*.dll" "$(ProjectDir)$(OutDir)"

кстати, вы можете легко отлаживать скрипты, добавляя " эхо " в начале и наблюдать расширенный текст в окне вывода сборки.

подробности в разделе комментариев выше не работали для меня (VS 2013) при попытке скопировать выходную dll из одного проекта C++ в папку release и debug другого проекта C# в том же решении.

мне пришлось добавить следующее сообщение build-action (щелкните правой кнопкой мыши на проекте, который имеет.вывод dll) тогда свойства - > свойства конфигурации - > события сборки - > событие после сборки - > командная строка

Я добавил Эти две строки для копирования вывод dll в две папки:
xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Release
xcopy /y $(TargetPath) $(SolutionDir)aeiscontroller\bin\Debug

(этот ответ относится только к C#, не C++, к сожалению, я неправильно понял исходный вопрос)

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

этой должны быть частью инфраструктуры .NET или pinvoke, так как это так полезно.... Это делает вашу управляемую DLL легко управление, как с помощью Xcopy, так и в качестве ссылки на проект в более крупном решении Visual Studio. Как только вы это сделаете, вам не придется беспокоиться о событиях после сборки.

обновление:

Я разместил код здесь в другом ответе https://stackoverflow.com/a/11038376/364818