Возникла проблема с копированием транзитивных зависимостей в выходную директорию при сборке посредством MSBuild.
Предположим, есть проект Core.csproj, который ссылается на библиотеку ThirdParty.dll;
есть проект Api.csproj, который ссылается на Core.csproj и не ссылается прямо на ThirdParty.dll;
есть проект Application.csproj, который ссылается на Api.csproj и не ссылается прямо на Core.csproj и ThirdParty.dll:
ThirdParty.dll ← Core.csproj ← Api.csproj ← Application.csproj
Для первых двух проектов выходной папкой установлена «$(SolutionDir)Bin\Common\$(Configuration)-$(Platform)\». Для последнего проекта установлена отдельная папка «$(SolutionDir)Bin\Application\$(Configuration)-$(Platform)\».
Ожидаемое поведение сборки: в выходную папку Application скопируются Application.exe, его явная зависимость Api.dll, неявные зависимости Core.dll и ThirdParty.dll.
Для тривиальных проектов всё происходит согласно ожиданиям. Но в каких-то более сложных случаях что-то нарушается, и в выходную директорию Application не копируются зависимости второго порядка. С чем это может быть связано, есть ли какие-то общие рекомендации, или это проблемы конкретных скриптов сборки?