Одно из предложений, которое я видел для этого, - изменить все ваши проекты, чтобы они имели одинаковый путь вывода.Это имеет ограниченную ценность, поскольку, если у вас есть цепочка зависимостей, такая как: Prj B> Prj A> Lib C, то это, вероятно, потому, что Prj A совместно используется несколькими приложениями, для которых вы захотите, чтобы у каждого был свой собственный выходной путь.
Я решил проблему, вместо этого используя MSBuild для компиляции, и установив свойство OutDir для каждой сборки.
например, MSBuild projectB.csproj /p:OutDir=C:\AppBOutput\
Это поместит выходные данные для проекта B,его зависимые проекты (prj A) и prj As копируют все локальные зависимости в каталог C: \ AppBOutput \.
Почему это работает
При сборке проекта в Visual Studio оба prj Aи prj B имеют свой собственный выходной каталог, например prjA\bin\debug
и prjB\bin\debug
.Сохраненная в GAC сборка, установленная на copylocal, будет включена в выходной каталог проекта, который непосредственно ссылается на него (prjA).Но он будет не скопирован в выходной каталог проекта, ссылающегося на этот проект (prjB).Так работает копирование ссылок на проект.Окунитесь в цели MSBuild, и я уверен, что основная причина может быть найдена (извините, не делаю это сам).
Что делает параметр /p:OutDir=C:\AppBOutput\
MSBuild, так это установление выходного каталога all проектов будут одинаковыми.Делая это, вы обходите MSBuild так, как он копирует эталонные выходные данные проекта.Вместо того чтобы полагаться на MSBuild для копирования некоторых содержимого в prjA\bin\debug
в prjB\bin\debug
, вы просто принудительно выводите все проекты в один и тот же каталог.