Подтвердить что ты не робот

Зависимости ссылок, не скопированных в выходной каталог

У меня есть CommonUtils lib, который я встроил в dll, который я ссылаюсь на несколько проектов. CommonUtils зависит от log4net.dll, который был установлен как ссылка на файл, а copy-local = true, когда была создана CommonUtils.dll. log4net.dll и CommonUtils.dll не находятся в GAC.

Все отлично работает в MyWorkingProject, где у меня есть только ссылка на файл CommonUtils.dll - log4net.dll отображается в выходном каталоге (так как это зависимость от CommonUtils.dll, но не ссылка на MyWorkingProject). Однако, если я создаю новый проект, чтобы добавить некоторые unittests: MyWorkingProjectTest и ссылку на проект MyWorkingProject, а затем снова ссылку на файл CommonUtils.dll здесь (я хочу использовать некоторые из CommonUtils), то при построении log4net.dll, который является зависимостью в обоих проектах ссылка и в ссылке на файл также не копируется в выходной каталог.

Кто-нибудь может объяснить, что здесь происходит? Не компилятор не знает, какой из файлов log4net.dll он должен захватить? Что-то я здесь делаю неправильно? Должен ли я сделать это каким-либо другим способом, чтобы log4net.dll явно скопировался? Имеет ли смысл, что я должен явно ссылаться на log4net?

4b9b3361

Ответ 1

Это по дизайну. Вам нужно подумать о последствиях, которые вызовет автоматическое наследование ссылок. Хотя вы можете логически понять, какие ссылки должны быть, такого компилятора не существует. Теоретически вы могли бы закончить воспроизведение Framework и хорошей части вашей ОС, если бы он прошел все дерево зависимостей.

Это определенно боль, и я соглашаюсь и понимаю ваше разочарование, но я полагаю, что Microsoft не смогла найти логический способ сделать это в противном случае.

Ответ 2

Я считаю, что если вы не добавите log4net в качестве ссылки в своем проекте, он не будет скопирован.

Ответ 3

Когда у меня была аналогичная ситуация в прошлом, я получил предупреждение в Visual Studio о том, что мне нужно добавить ссылку на зависимую библиотеку.

Получаете ли вы такое предупреждение при компиляции? Если да, следуйте рекомендациям, которые он дает, и вы должны найти Log4net, скопированный в ваш выходной каталог.