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