Ответ 1
Одно из предложений, которое я видел в этом случае, заключается в том, чтобы изменить все ваши проекты на один и тот же путь вывода. Это имеет ограниченное значение, поскольку, если у вас есть цепочка зависимостей, например: Prj B > Prj A > Lib C Тогда, вероятно, из-за того, что Prj A разделяется между несколькими приложениями, для которых вы захотите, чтобы каждый из них имел свой собственный путь вывода.
Я решил проблему, вместо этого используя MSBuild для компиляции и установки свойства OutDir для каждой сборки.
например. MSBuild projectB.csproj /p:OutDir=C:\AppBOutput\
Это приведет к выходу для проекта B, его зависимых проектов (prj A) и prj. Скопируйте локальные зависимости all в каталог 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
, вы просто вынуждаете все проекты выводить в тот же каталог.