Файл DLL копирует в каталог bin одного проекта, а не в другой? - PullRequest
0 голосов
/ 28 июля 2011

У меня есть решение с двумя проектами: ProjA и ProjB.ProjA - это приложение, а ProjB - это библиотека.ProjB также ссылается на 3 других DLL-файла (C, D, E).Когда я собираю ProjB C, D и E, все идут в каталог bin.Когда я компилирую ProjA (который ТОЛЬКО ссылается на ProjB) копируются только C и D, а не E.

Я действительно не уверен, что могло бы вызвать это.Я посмотрел на справочные свойства и все 3 (C, D и E) идентичны (за исключением их имени и пути).Наверное, я не уверен, почему ProjB помещает E в каталог bin, но когда моё приложение (ProjA) строит, оно не копирует E локально?

1 Ответ

1 голос
/ 29 июля 2011

Я собираюсь выйти здесь на конечность и сделать дикое предположение: ссылка 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 является статической ссылкой, она не обнаруживает каких-либо изменений. До тех пор, пока вы не выполните очистку, сборка будет выполняться нормально.

Не знаю, поможет ли это. В противном случае, удачи.

...