Wrt. предлагаемый обман:. Поскольку этот критерий подсказывает противоположность связанного вопроса, я бы предпочел подумать, что это не обман.
Первый, я прочитал Что такое наилучшая практика для "Копировать локальную" и с ссылками на проекты? (также this), и мне все равно придется попробовать это, но получение общей обратной связи по этому поводу представляется необходимым, поскольку docs на этом материале ужасны, и я только на VS2010 и, возможно, они что-то изменили в более новых версиях, которые будут приятно знать.
Второй, меня интересуют только ссылки проекта по этому вопросу, так как я читал, что сборки из GAC обрабатываются по-разному, и GAC не имеет отношения к моей проблеме.
Третий, прочитав предложенный обман, но тем более приятный ответ здесь by @Albireo, также показалось бы, что это важно различать зависимости файлов, где зависимость ссылается на файл сборки dll и зависимые от проекта зависимости (то есть, о чем я спрашиваю), где зависимость ссылается на проект и неявно выходной файл этого проекта.
Во всяком случае, здесь ситуация, несколько своеобразная, я думаю, но все же:
- 2 исполняемых проекта С#
- n Проекты сборки cll dll
- 2 исполняемых файла имеют разные выходные каталоги, поскольку они будут разворачиваться отдельно и таким образом они также будут раздельными на машине разработчика.
- 2 исполняемых файла имеют зависимости от некоторых сборок DLL (которые могут зависеть друг от друга)
- Существует три выходных каталога:
-
/x1
для исполняемого проекта 1 -
/x2
для исполняемого проекта 2 -
/lib
для всех сборок dll
-
Все сборки DLL имеют Copy Local
для для своих ссылок на проект, так как все они строятся в одном каталоге.
2 исполняемые проекты установили Copy Local
в true
для всех ссылок на проект сборки DLL, ссылки на которые они ссылаются напрямую, так что библиотеки DLL будут скопированы в /x1
/x2
соответственно.
Вопрос теперь есть. к DLL, которые напрямую не ссылаются на исполняемый проект, но только транзитно через ссылочную сборку: Собираются ли сборки, которые только ссылаются транзитно через другую сборку, копируются в выходную папку исполняемого файла, когда "Скопировать локальный" установлено на true на первой сборке?
Пример:
-
x1.csproj
(например, Output =x1/one.exe
)- Ссылка:
dlA.csproj
(например, Output =lib/a.dll
) сCopy Local = *true*
- (без ссылки на b.dll)
- Ссылка:
-
dlA.csproj
(например, Output =lib/a.dll
)- Ссылка:
dlB.csproj
(например, Output =lib/b.dll
) сCopy Local = **false**
- (нет прямой ссылки на c.dll)
- Ссылка:
-
dlC.csproj
(например, Output =lib/c.dll
)- (никаких дополнительных ссылок)
Таким образом, мы имеем логическую зависимость от one.exe -> a.dll -> b.dll -> c.dll
, где только a.dll
, очевидно, копируется в выходной каталог one.exe
. Будут ли скопированы и другие две библиотеки DLL в выходной каталог? Является ли это документированным где-нибудь?
И, да, я попробовал. И, да, кажется, это работает, но я еще не слишком сильно это сделал, и в любом случае может быть что-то еще, что я, возможно, пропустил. (И также есть вопрос по любым официальным документам.)