web-dev-qa-db-ja.com

循環依存エラーのため、プロジェクトに参照を追加できません

アプリケーションで2つのダミープロジェクトを作成し、BALおよびDALという名前を付けました。それらをビルドすると、正常にビルドされます。 BALへの参照をDALプロジェクトに追加すると、うまく追加されました。しかし、DAL参照をBALプロジェクトに追加すると、次のエラーが表示されます。

DALへの参照を追加できませんでした。このプロジェクトを参照として追加すると、循環依存関係が発生します。

誰でもこのエラーを解決するのに役立ちますか?

35
Venkat

これがあなたがする必要があることです:

  1. ソリューションエクスプローラーでDALプロジェクトを右クリックし、コンテキストメニューでプロジェクトの依存関係を選択します。

  2. DALプロジェクトのプロジェクトの依存関係を示すウィンドウが表示されます。 BALがチェックされていないことを確認してください。

これで参照を追加できるはずです...

これが、できるだけシンプルで簡単なものにしようとするのに役立つことを願っています。

説明:

DALはBALにアクセスできません。コード参照の依存関係は次のようになります。

MVCプロジェクト-> BAL-> DAL

MVCプロジェクトはBALを参照する必要があり、BALはDALを参照する必要があります。このようにプロジェクトを設定します。動作させると、このセットアップが優れている理由をよりよく理解できます。

指定:

  1. データ = 生の数字と文字列
  2. 情報 = データを意味のあるものに処理

次を考慮してください: UIは、DALに基づいてdataを構成できるBALからinformationを取得する必要があります。

32
Prime By Design

「レイヤー」の概念では、上位のレイヤーが下位のレイヤーに依存し、逆ではないことに暗黙のうちに関係しています。 2つの「レイヤー」が相互に依存している場合、一方は他方よりも高くなく、意味のある意味ではレイヤーではないため、同じレイヤーにあると見なすことができます。 Studioがプロジェクトの依存関係に適用するのと同じ基本的な原則が、アーキテクチャコンポーネントまたはモジュールにも当てはまります。この原則を使用する場合は、プロジェクトを設計モジュールとしてではなく、設計モジュールとして考えてください。すべてを単一のプロジェクトに投入するだけで、コードベースが適切に構成され、サイズが大きくなるにつれて問題がはるかに少なくなります。

1つの方法でしか参照できません。そうしないと、前述のようにエラーが発生します。これを行うだけです。DALからBLへの参照を削除し、BLからDALへの新しい参照を作成してください。

8
jefsmi

それは循環依存を引き起こします。代わりにおそらくやりたいことは、BALを参照し、BALがDALを参照するメインアプリケーションプロジェクトを持つことです。データアクセスでは、ビジネスロジックを参照する必要はありません。

2
plenderj

これはちょうど私に起こった。循環依存関係があります。つまり、2つのプロジェクトが両方とも相互に参照しています。それらの1つを他から独立させる必要があります。少し時間がかかり、それはとても早く起こります。 1秒後に私は喜んでコーディングを行い、次の時間には45個のエラーが発生しました。少し時間がかかりましたが、アーキテクチャ/プログラム構造も改善され、依存関係を適切に整理できます。

1
richard

この問題は、リポジトリインターフェイスレイヤー、リポジトリサービスレイヤー、SQLサービスレイヤー、レストサービスレイヤー、メインのWPF UIレイヤーなどの複数のレイヤーでWPFアプリケーションを構築しているときに発生しました。

  • このエラーを解決しました。一部のレイヤーが他のプロジェクトを不必要に参照していることに気付きました。この不要な参照を削除しました。
  • 次に、サービスレイヤーとリポジトリレイヤーの一部に、WPF UIプロジェクトが参照(My StartUpプロジェクト)として含まれていることに気付きました。これが循環参照を作成していました。これを削除しました。

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

結論:各プロジェクトの参照依存関係を確認し、不要な参照がないことを確認してください。サブレイヤーがリファレンス内のスタートアッププロジェクトを参照していないことを確認してください。

お役に立てば幸いです。

0
Abhay Shiro

私の場合、新しいProjectGuidを生成せずにプロジェクトファイルをコピーしました。 Visual StudioはProjectGuidを使用してプロジェクトを一意に識別するため、プロジェクトが自分自身を参照しようとしていると想定していました。

0
Sebazzz