2013-01-24 359 views
3

我有一個遺留系統,由15個不同的項目組成,當我試圖從另一個Visual Studio中引用一個抱怨,它不能這樣做會導致循環依賴。Visual Studio和循環依賴問題

我的問題是,我不明白它會如何導致循環依賴,因爲我試圖引用的項目('XScript')沒有任何形式的項目試圖引用它( 'WPF_Forms')。

從這裏的研究我發現人們遭受類似的命運,雖然他們的問題似乎有明顯的循環依賴。

我已經下載了一個NDepend的演示版本,就像從這裏的幾篇文章中推薦的那樣,儘管通過各種依賴工具工作仍然沒有明顯的鏈接。

我右鍵單擊了涉及的項目並使用「項目依賴項」選項,但我看不到任何鏈接。我也重新啓動了Visual Studio,並嘗試使用「Clean Solution」和「Re-build Solution」無濟於事。

我已經能夠想出的唯一方法是通過引用構建的DLL而不是項目本身引用'XScript',但是這感覺有點髒,我想知道爲什麼會發生這種情況而只是繞它而行。

任何人都可以提出我可能錯過的任何東西或任何可以用來解決發生了什麼問題的策略嗎?

編輯1: XScript用於引用WPF_Forms但參考已被刪除(和項目清理和不依賴顯示「項目依賴」窗口上重建,我想這可能是可能是VS保留。鏈接的地方或者說,它認爲該項目有某種聯繫

EDIT 2:從BitBonk的建議,我已經跑了用於VS的符號映射功能,並制定了項目拓撲繼XScript和WPF_Forms只被引用主要的.exe和沒有別的。我開始懷疑這是一個VS問題,我可能不得不創建一個新的項目,並再次添加所有的子項目,以獲得它工作。

+0

也許誰downvoted可以解釋爲什麼?我不確定這如何算作一個糟糕的問題? – GrandMasterFlush

回答

8

而問題是:的Visual Studio 2012

使用代碼地圖後像Bitbonk建議我看不到任何引用,將導致問題。所以,我從項目中移除了XScript和WPF_Forms,運行了一個乾淨的,添加了XScript的文件,然後運行一個乾淨的文件,然後添加了WPF_Forms並運行了一個乾淨的文件。

之後,將WPF_Forms引用添加到XScript中不會導致任何問題。我只能猜測這是VS引發的一個錯誤,它並沒有意識到從XScript到WPF_Forms不再存在依賴關係。

希望這個問題和建議的答案將在未來幫助別人。

+1

確實,這個問題和建議的答案是我遇到的確切問題。我已將項目移至插件體系結構,因此必須撤消依賴關係。讓它工作的唯一方法是刪除這兩個項目,然後重新添加它們。這是在VS2013,所以錯誤顯然不是固定的。 –

+0

有同樣的問題,這是在VS2013 WPF解決方案中,刪除這兩個項目,清理解決方案並將其添加回來解決問題。 – MaxJ

+1

對我來說同樣的問題。我有點瘋狂,但你的解決方案是正確的。那個該死的時刻,當你不知道你是錯的還是VS離真相只有幾英里的時候... – Thibault

1

也許你的循環依賴涉及2個以上的項目。

+0

謝謝塞巴斯蒂安,我曾考慮過,但看看NDepend生成的圖表我看不到這是怎麼回事。請參閱我的編輯,因爲我剛剛記起了可能有用的東西。 – GrandMasterFlush

4

正如其他人已經指出的那樣,您的循環依賴可能涉及多個級別。您可以使用viusal studio 2012的功能代碼圖輕鬆查看依賴關係圖。通過這種方式,您可能能夠發現這種情況。

enter image description here

+0

感謝您的建議BitBonk,這是一個有用的工具。雖然沒有解釋發生了什麼,但我會立刻將結果添加到我的問題中。 – GrandMasterFlush

+0

如果您想要循環依賴,該怎麼辦?在我的情況下,我有一個項目的領域模型,然後在我的Web界面項目我有視圖模型。現在我想要一個depdancy來指出兩種方式。 – Zapnologica

+2

@Zapnologica如果兩組類真的應該互相引用,它們應該在同一個項目中。如果將它們放在同一個項目中是錯誤的,那麼解決方案通常是一個共享的常用程序集,它具有由兩個原始程序集中的類實現的接口。然後,您可以通過界面而不是其具體設計來參考其他裝配體中的類型。 –