Я собираюсь выйти здесь на конечность и сделать дикое предположение: ссылка E не используется напрямую проектом B, поэтому ссылка не появляется в манифесте PE выходных данных проекта B.
Скорее всего, у вас есть "Copy Local" в ссылках в Project B, который объясняет, почему эти сборки копируются в папку bin проекта B.
Однако, если вы откроете dll для проекта B, вы заметите, что ссылка E не указана в качестве зависимости сборки. Visual Studio / MSBuild не может сделать вывод, что для использования в Project A сборки B требуется E.
Чтобы решить проблему, используйте класс или функцию ссылки E в Проекте B.
Кроме того, проект A & B может выводить свои сборки в общую папку. Совет: в этом сценарии отключите «Копировать локально», чтобы повысить производительность сборки.
Обновление:
Я пробовал несколько разных способов воспроизвести вашу проблему, но самый близкий, который я получил, был из этого поста , который предполагает, что это может быть проблема с поиском пути . В приведенном примере ссылка от A до B является ссылкой на статический файл (bin \ Debug \ ProjB.dll), а зависимости (E) определены как Copy Local = False. Пример проекта настроен таким образом, что все зависимости были скомпилированы и упакованы в zip.
Когда вы компилируете A, описанная вами проблема заметна. Исправление должно состоять в том, чтобы изменить ссылку ProjB E на «Copy Local = True», но если вы сделаете это изменение и перекомпилируете - нет никакой разницы! Почему?
Кажется, что изменение параметра «Копировать локально» на самом деле никак не влияет на вывод ProjB. И поскольку ссылка в ProjB является статической ссылкой, она не обнаруживает каких-либо изменений. До тех пор, пока вы не выполните очистку, сборка будет выполняться нормально.
Не знаю, поможет ли это. В противном случае, удачи.