2009-11-30 102 views
2

在Visual Studio 2005中有沒有找到項目的所有引用的方法?Visual Studio:幫助修復循環引用!

我有一個與多個項目(DLL)的解決方案。在項目B中引用時,項目A VS告訴我由於「循環引用」,它無法添加此引用。

然而,該項目A不包含直接引用B.顯然,在有一個引用B.

A <=?= B (circular ref.) 

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

如何找到這個X一箇中間的參考?

===編輯(好奇):) 解決方案中有63個項目。

+2

出於好奇,您在解決方案中有多少個項目? – Vedran 2009-11-30 15:32:31

+2

解決方案中的63個項目... :) – serhio 2009-11-30 15:53:39

回答

5

我強烈建議你看看使用NDepend,這是一個很好的方法來發現隱藏的依賴關係。該工具將幫助您找到代碼中的所有問題。重構它最終取決於你。

處理循環依賴關係的標準方法是,其中A引用B和B引用A,將拉引A和B引用的項並將它們放入單獨的程序集C中,以便A引用C和B引用C,但C沒有引用A或B.

根據您的問題的閱讀,我的猜測是,您有很多靜態方法或屬性,您可以在整個地方使用。擺脫它們,或將它們全部移到一個所有參考的單個項目中。我更喜歡前者;靜態的東西往往難以進行單元測試。

mmm。有趣的,有趣的...什麼是「免費」「變通辦法」? :)

重構,沒有「解決方法」的。 NDepend只是一個工具,可以幫助你找到痛苦的地方;它不會爲你做這項工作。謝天謝地,它有一個免費試用版,可以幫助您解決眼前的問題。

如果你不想使用它,你唯一的「解決方法」是通過搜索你的代碼找到循環引用。有一件事可能會幫助您找到問題區域,即從項目B中刪除對項目A的引用並查看哪些中斷,然後將它與從項目A中刪除對項目B的引用時發生的中斷進行比較。將這些列表應該給你一個出發點。

但是你將不得不重構你的代碼;有沒有擺脫這一點。

+1

+1:NDepend是這種情況的一個很好的起點。 – 2009-11-30 16:06:34

+1

mmm。有趣的,有趣的...什麼是「免費」「變通辦法」? :) – serhio 2009-11-30 17:39:26

+0

免費$$全部手工完成。這是時間或$$,你選擇。 – 2009-12-01 00:56:02