У меня есть решение для многих проектов. На самом деле есть проект Core и несколько плагинов. Я изменил OutputPath для всех плагинов, чтобы все двоичные файлы попадали в папку Core bin \ debug. (это необходимо, поскольку ядро не имеет ссылки на плагины, следовательно, оно не "включает" двоичные файлы плагинов при компиляции.)
Итак, в основном моя структура папок следующая:
Solution MySolution.sln Plugin1\ Plugin2\ Core\bin\debug
Путь вывода каждого плагина - ".. \ Core \ bin \ debug". Когда я открываю решение, Visual Studio создает папку «Core \ bin \ debug» в родительской папке решения, как будто относительный путь начинается с файла .sln. Однако, когда я создаю решение, двоичные файлы выводятся по правильному пути («Решение \ Core \ bin \ debug»).
Core\bin\debugМне это кажется ошибкой Visual Studio, но, возможно, я где-то пропустил какой-то вариант. Есть идеи, как решить эту проблему?
PS: Я знаю, что это не критическая проблема, так как все строится и работает нормально, однако мне не нравится идея о том, что бессмысленная папка висит вокруг





Вместо того, чтобы изменять выходное расположение подключаемых модулей, вы могли бы создать для них сценарий пост-сборки (вкладка Properties \ Build Events), который скопирует их в папку Core. Это предотвратит путаницу с выходными папками.
Эта командная строка должна помочь вам:
copy "$(TargetPath)" "$(SolutionDir)Core\$(OutDir)"
Если вам нужно скопировать файлы .pdb и .config, вы можете добавить больше строк:
copy "$(TargetPath).pdb" "$(SolutionDir)Core\$(OutDir)"
copy "$(TargetPath).config" "$(SolutionDir)Core\$(OutDir)"
Если вы действительно хотите сделать это одной строкой, это тоже должно сработать, хотя и не так чисто:
copy "$(TargetPath)*" "$(SolutionDir)Core\$(OutDir)"
Если вы не используете один и тот же выходной путь как в основном проекте, так и в надстройках, вам необходимо заменить $ (OutDir) жестко заданным значением. Если вы настроили их на типичную папку «\ bin \ Debug» (или просто оставили значения по умолчанию на месте), то вы можете обойтись без использования значения $ (OutDir).
Более того, это фактически дублирует множество файлов. Поскольку все плагины зависят от Core, это означает, что основная сборка (и ее собственные зависимости) будут скопированы в каждую выходную папку плагина.
Использование $ (OutDir) предполагает, что у вас есть одинаковые целевые каталоги, настроенные для сборки обоих проектов (обычно «\ bin \ Debug»). Если это не так, вам придется его жестко запрограммировать.
Re. Второй комментарий: это не будет дублировать ничего, кроме подключаемых библиотек .dll. Он копирует их в корзину ядра, а не двоичные файлы ядра в путь к плагину.
Когда VisualStudio создает плагин, он «импортирует» ядро в папку вывода плагина. Что можно сделать, так это установить для параметра «Копировать локально» значение false для всех ссылок на плагины (включая, конечно, Ядро). Это сработает.
Полагаю, $ (TargetPath) должен быть $ (TargetDir) в последнем примере.
Вместо использования «.. \ Core \ bin \ debug» используйте «$ (SolutionDir) \ Core \ bin \ debug».
Я пробовал это. Но макросы нельзя использовать в пути вывода. При построении он создаст каталог «$ (SolutionDir)».
ваша командная строка не будет копировать файлы .pdb .config, что может быть проблемой (не может правильно отлаживаться). Использование $ (OutDir) совершенно неправильно, так как оно относится к текущему проекту, а не к проекту Core.