Разница между зависимостью проекта и DLL в .NET в окончательной скомпилированной сборке
-
02-10-2019 - |
Вопрос
Допустим, у меня есть два проекта A и B. A зависит от B. Я могу указать это двумя способами:
- Включите A и B в одно и то же решение и укажите B как зависимость проекта для A. Это отображается в проекте A Msbuild As как узел «Projectreference».
- Включите ссылку на скомпилированный DLL B как зависимость A. Это отображается в проекте A MsBuild как «справочный» узел
Мой вопрос: как только я строю сборку для A, есть ли разница в конечном результате между этими двумя методами.
Я попытался создать пару простых проектов, которые моделируют это отношение, и попробовал сравнение, но разные инструменты сравнения рассказывают мне разные вещи. В ожидании написания чего-то, что сравнивает эти файлы по байтовому, мне было интересно, знали ли вы что-нибудь об этом. В частности, будет ли какая -то разница в поведении встроенной сборки, если я использую ссылку DLL вместо справки проекта.
Решение
Если источники проекта B не изменились между двумя сборками проекта A, не будет разницы в поведении проекта A. Однако, если источники проекта B изменились, ссылаясь на его проект из проекта A, приведет к восстановлению проекта B. Эта разница в том, что определяет ваш выбор, как справиться с проектом B из проекта A:
Если у вас есть источник как проекта, так и проекта A, и они тесно связаны, или если они оба находятся в активной разработке, и проект B часто прерывает изменения его публичного интерфейса, вы хотите ссылаться на проект B в качестве проекта. Это гарантирует, что проект всегда использует в своей сборке наиболее современный выход проекта B.
Если проект B является внешней зависимостью, вы не развиваете себя, или у вас нет источников, или если он уже отправлен, и вы не можете отправить модифицированную версию с проектом A, вы хотите ссылаться на предварительно построенный Вывод проекта B, чтобы убедиться, что вы разрабатываете и тестируете с той же версией проекта B, который, скорее всего, будет на компьютерах ваших пользователей.
Другие советы
Добавление в качестве ссылки на проект просто имеет преимущество в том, что сборка «B» автоматически создается, если это необходимо.
После того, как сборка «А» построена, нет разницы.