Thursday, February 7, 2013

VS Project dependencies viewer. One that just works.

Как-то мне понадобилось изучить зависимости между проектами. Я попробовал различные инструменты для этого, но никто не справился нарисовать более или менее внятную картину для нашего случая. А случай довольно экзотический, сейчас в солюшене ReSharper более 300 проектов. Встроенная фича студии Ultimate показала мне следующее:
Пришлось придумывать что-то своё. В качестве программы для просмотра я выбрал yEd от yWorks, сгенерировал граф зависимостей между проектами в ее формате, но по-прежнему ничего понятно не было.
Пришлось применять некоторые улучшения:

  1. Убрать все транзитивные зависимости. Если были проекты A, B и C и зависимости (A->B, B->C и A->C), то A->C можно не показывать так как она сама по себе не так важна.
  2. Сделать в графе группировки (я использовал Solution Folders). Это что помогает yFiles лучше справиться со своей задачей. 
  3. Дать возможность выбрать проекты для которых построить зависимости. При этом учитывать транзитивные зависимости проходящие через невыбранные проекты.
  4. При наличии групп можно не показывать проекты от которых нет зависимостей вне группы. (Это опционало, конечно). 
Все это вместе позволило быстро соорудить поделку, позволяющую решать мои задачи по разруливанию зависимостей между проектами. И самое главное, если у Вас уже есть ReSharper 7, то можно попробовать то, что у меня получилось. Необходимо поставить yEd от yWorks, запустить студию с ключиком /resharper.internal и идти в меню ReSharper -> Internal -> Show Dependencies:
Затем, в окошке должны появиться проекты, сгруппированные по папкам. Эта группировка будет использована при построении графа. Выбираем проекты которые хочется показать. Внимание, есть галочка 'Exclude terminal nodes'.
Получается вполне читаемая картинка (чтобы ее получить необходимо нажать магический Alt+Shift+H - раскладка иерархическая):
Буду рад фидбэку =)

Manual:

  1. Install yEd tool from here
  2. Run VS with /resharper.internal command line argument.
  3. Go to ReSharper/Internal/Show Dependencies. 
  4. Specify projects that you want to include to the 'big picture'. 
  5. Uncheck 'Exclude terminal nodes...' unless you need it. 
  6. Press 'Show'. 
  7. Use hierarchical layout in yEd (Alt+Shift+H) 
  8. Provide feedback =)