2

У меня есть файл с Visual Studio с несколькими проектами (в основном C++),
Большинство из них настроены довольно стандартным образом, а каталог Output установлен в каталог «bin».
Некоторым из них нужна их основная цель вывода для вывода в подкаталог «bin» (то есть «bin \ others»), но со всеми их зависимостями между DLL (управляемыми как пакеты NuGet), все еще скопированными в каталог «bin» ,
(зависимостей библиотеки DLL должны быть в \ Bin, потому что «другие» проекты библиотеки DLL загружаются во время выполнения с помощью EXE в \ Bin, поэтому зависимости должны быть найдены в пути EXE)Каков правильный способ вывода скомпилированного целевого объекта в другую папку, чем библиотеки DLL-зависимостей?

Структура выходных путей выглядит следующим образом:

\bin (main EXE and ALL dependencies DLLs) 
\bin\others (others projects, with their dependencies DLL in \bin) 

То, что я пытался до сих пор:

  1. изменение $ (OutDir) для «других» проектов, но это не работает, потому что вся зависимость NuGet также будет скопирована в тот же выход каталог.

  2. Сохранить $ (OutDir) в \ bin, но изменить «другие» проекты TargetName на «other \ $ (ProjectName)», но это вызывает ошибки при перестройке с чистого (то есть в автоматическом сборке), поскольку MSBuild (на самом деле файл Microsoft.CppClean.targets , включенный по умолчанию в проекты VC++) пытается записать в «$ (IntDir) $ (TargetName) .Build.CppClean.log», которого не существует (поскольку «$ (IntDir) \ others \ "каталог еще не создан).

Я хотел бы избежать после построения действия, потому что CMD, как команды имеют проблемы с параллельной автоматической сборкой с помощью MSBuild и задача MSBuild внутри проектов должна поддерживаться вручную (VS IDE не suppert их, AFAIK).

Любая идея или предложение о том, как решить эту проблему?

+0

Очень плохая практика. Не только из-за проблемы с сборкой, вы не объяснили, как вы собираетесь решить следующую проблему. ОС не имеет большого шанса найти зависимости в этой «другой» папке, она не будет выглядеть там. Хороший Q + A также должен указать эту деталь. –

+0

@ HansPassant Не забудьте понять свою точку зрения, но в Windows, если вы запустите EXE (в папке «bin»), которая динамически загружает DLLS из папки «bin \ others», зависимости будут правильно найдены в «bin», это почему я нуждаюсь в них, чтобы остаться там, а не в «bin \ others». – roalz

ответ

2

Путь поиска по умолчанию dll включает каталоги, перечисленные в переменной среды PATH (MSDN: standard search order for desktop applications).

Вы можете рассмотреть возможность добавления нужного пути к переменной PATH в среде отладки «Свойства конфигурации-> Отладка-> Среда». Что-то вроде: «PATH = $ PATH; $ (SolutionDir) \ bin \ others».

+0

Это хороший совет, но, к сожалению, в моем случае мне нужны библиотеки зависимостей, чтобы оставаться в \ bin \, где EXE тоже, по другим причинам (в директории "others" должны быть только проекты с другими проектами (DLL) , – roalz