Одно из предложений, которое я видел вокруг этого, - это изменить все ваши проекты, чтобы они имели один и тот же путь вывода. Это имеет ограниченное значение, поскольку, если у вас есть цепочка зависимостей, например: Prj B> Prj A> Lib C Тогда это, вероятно, связано с тем, что Prj A используется в нескольких приложениях, для которых вы захотите, чтобы у каждого был свой собственный путь вывода.
Я решил проблему, используя MSBuild для компиляции и установив свойство OutDir для каждой сборки.
e.g. 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 устанавливает одинаковый выходной каталог для всех проектов. Делая это, вы обойдете поведение MSBuild в том, как он копирует выходные справочные данные от проекта к проекту. Вместо того, чтобы полагаться на MSBuild для копирования некоторого содержимого из prjA\bin\debug
в prjB\bin\debug
, вы просто заставляете все проекты выводить данные в один и тот же каталог.
person
Snixtor
schedule
23.01.2012
This reference is not "CopyLocal" because it's registered in the GAC.
. - person makhdumi   schedule 11.07.2016