Visual Studio: копирование зависимых библиотек DLL в целевую папку

Я понимаю, что этот вопрос задавался раньше , но ни один из ответов не относится к моему конкретному случаю:

  • У меня есть решение, содержащее собственный проект C++ EXE, который, в свою очередь, зависит от 40+ собственных проектов DLL C++ (в том же решении).

  • проект EXE имеет обычный Debug, релизпрофиль) конфигурации, но так как их же исходный код база используется для построения три различных приложения (скажем A1, A2 и A3). Кроме того, он нацелен на x32 и x64, так что в общей сложности 3 x 3 x 2 = 18 конфигураций проекта.

  • проекты DLL совместно используются всеми тремя целевыми приложениями, поэтому есть только 3 (Debug, релиз, профиль) раз 2 (x32, x64) = 6 конфигураций.

  • поскольку проект EXE зависит от Dll, он должен скопировать соответствующие выходные данные DLL-проектов в свою целевую папку (или ее подпапку) при каждом их изменении.

Как бы вы справились с обновлением DLL?

  • действие после сборки в каждом проекте DLL не работает (хорошо), так как ему пришлось бы скопировать DLL в соответствующую выходную папку A1, A2 и A3. Любые изменения в выходную папку в измените действие после сборки в каждом из 50 проектов DLL.

  • в настоящее время я добавил сами библиотеки DLL в качестве элементов проекта в проект EXE и настроил пользовательский инструмент сборки, чтобы скопировать его в выходную папку. Но для этого мне нужно добавить каждую DLL 6 раз,поэтому я получаю 6 x 50 = 300 DLL!

то, что мне действительно нужно, - это что-то вроде локальной опции копирования, которая, к сожалению, работает только с сборками. Решение Do вы предлагаете упростить это настройка сборки?

1 ответов


что я бы сделал, это поместить все DLL в одну папку (специфичную для отладки/выпуска и т. д.) и скопировать их обратно в соответствующую выходную папку вашего EXE.

Это можно сделать только два действия:

  • установите выходной каталог всех библиотек DLL в папку $(ConfigurationName)_$(PlatformShortName)

    • выберите все проекты DLL
    • Правой Кнопкой Мыши -> качеств личности
    • выберите все конфигурации и все платформы
    • установить выходной реж.--14-->
  • добавьте действие после сборки в проект EXE, общее для всех конфигураций, которые копируют $(ConfigurationName)_$(PlatformShortName)\*.dll to $(TargetDir)

редактировать

существует проблема во втором шаге, так как $(ConfigurationName) вашего EXE не совпадает с вашими проектами DLL. Не уверен, но, возможно, у вас есть способ вывести соответствующую конфигурацию, чтобы все еще иметь одно событие после сборки для всех ваших 18 конфигураций. Оно может быть новым так вопрос:)