Разница между проектными и dll-зависимостями в .Net в окончательной скомпилированной сборке - PullRequest
7 голосов
/ 15 сентября 2010

Допустим, у меня есть два проекта A и B. A зависит от B. Я могу указать это двумя способами:

  • Включите A и B в одно и то же решение и укажите B в качестве зависимости проекта для A. Это отображается в проекте msbuild A как узел "ProjectReference".
  • Включить ссылку на скомпилированную dll B как зависимость для A. Это отображается в проекте msbuild A как "Reference" узел

У меня вопрос: как только я соберу сборку для A, есть ли разница в конечном результате между этими двумя методами.

Я попытался создать пару простых проектов, которые моделируют это отношение, и попробовал сравнение, но разные инструменты сравнения говорят мне разные вещи. В ожидании написания чего-то, что сравнивает эти файлы побайтно, мне стало интересно, знали ли вы, ребята, что-нибудь об этом. В частности, будет ли какая-либо разница в поведении встроенной сборки, если я буду использовать ссылку на dll вместо ссылки на проект.

Ответы [ 2 ]

6 голосов
/ 15 сентября 2010

Если исходные данные проекта B не изменились между двумя сборками проекта A, не будет никакой разницы в поведении выходных данных проекта A. Однако, если источники проекта B изменились, ссылка на него как на проект из проекта A также приведет к перестройке проекта B. Это различие и определяет ваш выбор ссылки на проект B из проекта A:

  • если вы владеете источником как проекта B, так и проекта A, и они тесно связаны, или если они оба находятся в стадии активной разработки, а проект B часто подвергается изменениям в своем открытом интерфейсе, вы хотите сослаться на проект Б как проект. Это гарантировало бы, что проект A всегда использует в своей сборке самые последние выходные данные проекта B.

  • если проект B является внешней зависимостью, которую вы не разрабатываете самостоятельно, или у вас нет источников к ней, или если она уже отправлена, и вы не можете отправить измененную версию с проектом A, вы хотите чтобы сослаться на предварительно созданный вывод проекта B, чтобы убедиться, что вы разрабатываете и тестируете ту же версию проекта B, которая, скорее всего, будет на компьютерах ваших пользователей.

3 голосов
/ 15 сентября 2010

Добавление в качестве ссылки на проект имеет то преимущество, что сборка "B" автоматически создается при необходимости.

После сборки сборки "A" нет никакой разницы.

...