Раньше всегда это делал настолько автоматически, что даже и не задумывался что это млжно делать по-другому. Но когда столкнулся с такой проблемой в текущем проекте - решил написать.

 Рассмотрим такую ситуацию: у нас есть главная сборка (Main), сборка с утилитными классами (Utils) и 3-rd party логгер (Logger):

 

При этом Utils достался нам ещё со староко проекта и мы просто подключили его проект в наш solution, а логгер - соответствующий компонент из Microsoft Enterprise Library.
 
Решение этой задачи разбивается на следующие шаги:
  1. Добавляем в наш solution нужные нам проекты.
  2. Добавляем ссылки на проекты.
Почему-то, некоторые выбирают такой способ решения: выполняют шаг 1 - тут у нас только один способ сделать это (я не беру в счёт способ ручного редактирования *proj-файла), Build -> Rebuild Solution, и собственно добавление ссылки на проект путём добавления ссылки на dll:


В таком случае, если вам сильно повезёт и такого в вашем solution будет не много, достаточно будет сначала сделать Build -> Rebuild Solution, после чего всё заработает, а если не повезёт... А если не повезёт прийдётся ещё руками настраивать project dependecies и писать не менее захватывающий сценарий для билдов.
 
Теперь рассмотрим как это делать правильно:
Добавляем ссылку не на сборку, а на проект в solution:
 

 
После чего всё выглядит так:
 
Таким образом все зависимости на проекты выставляются автоматически и нам больше не нужен бубун для сборки solution и билдов.
 
Осталось подключись сборку с логгером. Но и здесь не всё так просто. В случае с Enterprise Library достаточно добавить ссылка на сборку из GAC:

У этого спосоа есть несколько недостатков: Enterprise Library должна быть установлена на всех машинах, где будет запускиться проект, и везде должна быть одна и таже версия. Второй недостаток хорошо ощёщается если использовать библиотеки, которые достаточно быстро развиваются и имеют множество версий (e.g. NUnit. AjaxControlToolkit, etc).
 
Я предпочитаю другой способ решения этой задачи (не могу сказать, что он не имеет недостатков, но, лично для меня, его преимущества имеют больший вес).
Все сторонние библиотеки кладутся в Source Control и уже на них ссылаются все проекты. Для удобства можно ещё создать папку в solution:

ReferencesSample.zip (76.14 kb)


Comments are closed