Visual Studio: помогите исправить круговую ссылку! - PullRequest
2 голосов
/ 30 ноября 2009

Есть ли способ в Visual Studio 2005 найти все ссылки на проект?

У меня есть решение с несколькими проектами (DLL). При ссылке в проекте B проект A VS сообщает мне, что не может добавить эту ссылку из-за "круговой ссылки".

Однако проект A не содержит прямой ссылки на B. По-видимому, в A есть промежуточные ссылки, которые ссылаются на B.

A <=?= B (circular ref.)

A =?=> X(?) =?=> B ( maybe there is an X that references B)

Как найти этот X?

=== РЕДАКТИРОВАТЬ (для любопытных) :) В решении 63 проекта.

1 Ответ

5 голосов
/ 30 ноября 2009

Я настоятельно рекомендую вам использовать NDepend , который является отличным способом поиска скрытых зависимостей. Этот инструмент поможет вам найти все болевые точки в вашем коде. Рефакторинг, в конечном счете, зависит от вас.

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

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

ттт. интересно, интересно ... а как насчет "бесплатных" "обходных путей"? :)

У вас есть для рефакторинга, для этого нет «обходного пути». NDepend - это просто инструмент, который поможет вам найти болезненные области; это не сделает работу за вас. К счастью, у него есть бесплатная пробная версия, которую вы можете использовать, чтобы помочь вам с вашей непосредственной проблемой.

Если вы не хотите его использовать, единственным «обходным путем» будет поиск циклической ссылки путем поиска в вашем коде. Одна вещь, которая может помочь вам найти проблемную область, состоит в том, чтобы удалить ссылку на Проект A из Проекта B и посмотреть, какие разрывы, а затем сравнить ее с тем, что ломается, когда вы удалите ссылку на Проект B из Проекта A. Объединение этих списков должен дать вам отправную точку.

Но вам придется реорганизовать ваш код; от этого никуда не деться.

...