Неправильно созданные папки вывода в Visual Studio 2008

У меня есть решение для многих проектов. На самом деле есть проект 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: Я знаю, что это не критическая проблема, так как все строится и работает нормально, однако мне не нравится идея о том, что бессмысленная папка висит вокруг

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 786
2

Ответы 2

Вместо того, чтобы изменять выходное расположение подключаемых модулей, вы могли бы создать для них сценарий пост-сборки (вкладка 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).

ваша командная строка не будет копировать файлы .pdb .config, что может быть проблемой (не может правильно отлаживаться). Использование $ (OutDir) совершенно неправильно, так как оно относится к текущему проекту, а не к проекту Core.

PowerKiKi 20.11.2008 11:23

Более того, это фактически дублирует множество файлов. Поскольку все плагины зависят от Core, это означает, что основная сборка (и ее собственные зависимости) будут скопированы в каждую выходную папку плагина.

PowerKiKi 20.11.2008 13:00

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

Jeromy Irvine 21.11.2008 23:22

Re. Второй комментарий: это не будет дублировать ничего, кроме подключаемых библиотек .dll. Он копирует их в корзину ядра, а не двоичные файлы ядра в путь к плагину.

Jeromy Irvine 21.11.2008 23:31

Когда VisualStudio создает плагин, он «импортирует» ядро ​​в папку вывода плагина. Что можно сделать, так это установить для параметра «Копировать локально» значение false для всех ссылок на плагины (включая, конечно, Ядро). Это сработает.

PowerKiKi 11.12.2008 17:00

Полагаю, $ (TargetPath) должен быть $ (TargetDir) в последнем примере.

mafu 29.04.2009 10:00

Вместо использования «.. \ Core \ bin \ debug» используйте «$ (SolutionDir) \ Core \ bin \ debug».

Я пробовал это. Но макросы нельзя использовать в пути вывода. При построении он создаст каталог «$ (SolutionDir)».

PowerKiKi 20.11.2008 11:29

Другие вопросы по теме