Невозможно добавить ссылку на проект из-за ошибки циклической зависимости - PullRequest
35 голосов
/ 17 августа 2011

Я создал 2 фиктивных проекта в своем приложении и назвал их BAL и DAL.Когда я их строю, они строят успешно.Если я добавлю ссылку на BAL в проект DAL, она добавится красиво.Но при добавлении ссылки DAL в проект BAL я получаю следующую ошибку:

Ссылка на DAL не может быть добавлена.Добавление этого проекта в качестве ссылки вызовет круговую зависимость.

Может кто-нибудь помочь мне решить эту ошибку?

Ответы [ 8 ]

32 голосов
/ 10 января 2014

Вот что вам нужно сделать:

  1. Щелкните правой кнопкой мыши проект DAL в обозревателе решений и выберите Зависимости проекта в контекстном меню.

  2. Теперь вы увидите окно, которое показывает зависимости проекта от проекта DAL. Убедитесь, что BAL не проверен.

Теперь вы сможете добавить свою ссылку ...

Надеюсь, это поможет, я постарался сделать его максимально простым и понятным.

Объяснение:

Ваш DAL не должен иметь доступа к BAL. Ваши ссылки на код должны быть такими:

Проект MVC -> BAL -> DAL

Проект MVC должен ссылаться на BAL, BAL должен ссылаться на DAL. Настройте свой проект, как это. Сделайте так, чтобы это работало, и тогда вы лучше поймете, почему эта установка лучше.

Дано:

  1. Данные = необработанные числа и строки
  2. Информация = обработанные данные во что-то значимое

Cosider следующее: Пользовательский интерфейс должен получить информацию от BAL, которая могла бы составлять его данные на основе DAL.

8 голосов
/ 17 августа 2011

В понятии «слои» подразумевается, что более высокие уровни зависят от более низких, а не наоборот. Если 2 «слоя» взаимозависимы, то один не выше другого, они не являются слоями в каком-либо значимом смысле и поэтому могут рассматриваться как находящиеся в одном и том же слое. Для архитектурных компонентов или модулей действует тот же базовый принцип, который применяется в Studio для зависимостей проекта. Если вы используете этот принцип - думайте о своих проектах как о модулях дизайна, а не, например. просто бросая все в один проект - у вас будет хорошо структурированная кодовая база, которая даст вам гораздо меньше проблем с ростом ее размера.

8 голосов
/ 17 августа 2011

Вы можете ссылаться только одним способом, иначе вы получите ошибку, как вы сказали.Просто сделайте это: удалите ссылку из вашего DAL в свой BL и создайте новую ссылку из своего BL в свой DAL!

2 голосов
/ 17 августа 2011

Это вызвало бы круговую зависимость. Вместо этого, возможно, вы захотите сделать основной проект приложения, который ссылается на BAL, а затем BAL ссылается на DAL. Доступ к данным не должен ссылаться на бизнес-логику.

1 голос
/ 12 декабря 2014

Это только что случилось со мной.У вас круговая зависимость, т.е. два проекта, ссылающиеся друг на друга.Вы должны сделать один из них независимым от другого.Занимает некоторое время, и это происходит так быстро.В одну секунду я радостно писал код, а в следующую у меня было 45 таких ошибок.Это заняло некоторое время, но это также улучшило вашу архитектуру / структуру программы, помогая правильно распределить зависимости.

0 голосов
/ 20 ноября 2016

Эта проблема возникла у меня, когда я создавал приложение WPF с несколькими уровнями, такими как уровень интерфейса репозитория, уровень сервиса репозитория, уровень сервиса sql, уровень сервиса отдыха и мой основной уровень пользовательского интерфейса WPF.

  • Я решил эту ошибку.Я заметил, что некоторые слои излишне ссылаются на другие проекты.Я удалил эту ненужную ссылку.
  • Затем я заметил, что некоторые из моих сервисных уровней и уровней репозитория использовали мой проект пользовательского интерфейса WPF в качестве эталона (мой проект StartUp);это то, что создавало круговую ссылку.Я удалил это.

=============================================================================

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

Надеюсь, я вам помог.

0 голосов
/ 14 октября 2016

В моем случае я скопировал файл проекта без генерации нового ProjectGuid. Поскольку Visual Studio однозначно идентифицирует проекты, используя ProjectGuid, предполагается, что проект пытается ссылаться на себя.

0 голосов
/ 27 июля 2012

Чтобы обойти это, добавьте ссылку, просматривая DLL проекта после его создания. Не выбирайте его на вкладке «Проекты».

...