2014-03-03 188 views
1

短版的問題:檢測依賴衝突

有沒有在編譯的時候檢測,如果我有其中2個或更多項目中引用不同版本的同一總成中的任何情況的好辦法? (說真的,我想教給我們的CI服務器來做到這一點)

長的版本:

因此,這裏是一個有趣的問題(簡單一點,便於消化):

最近遇到的情況我們的解決方案有2個項目,A和B. A和B取決於第三方NuGet包C.

一個總是加載C,B只需要下,在極少數情況下。

所以,這個衝刺過程中,更新項目A開發人員使用最新版本的C包的(沒有意識到B還依賴於C)

一切建成,我們已經通過了測試(我們有測試覆蓋率不足),但是當我們發佈到生產環境時,當B嘗試使用依賴關係時(加載器問題,因爲我們需要強命名程序集的不同版本),我們發生了故障。

我們發現了問題,並修正它,但。我真的很希望在開發過程中能夠抓住這一點。如果我們的構建服務器可以檢測到這個(TFS 2012),那麼它會更酷。

我怎麼可能去檢測這種情況?

回答

1

VS不能爲你做這個,因爲動態加載的(除非我失去了一些東西):它只是不知道哪個組件西港島線在運行時加載的方式。

我們曾經同樣的問題(使用棱鏡 - 我們所有的組件在應用程序啓動加載正常,但大多數都是可選的順序在配置文件中所述)。我首先想到製作一個小工具,它基本上掃描所有packages.config或csproj文件,以查看在哪個版本中使用了什麼程序集,並在找到兩個不同版本的包時使其抱怨。但是我最終以更高級別處理它,更直接,更簡單:我們現在有一個簡單的類,就像實際應用程序的一個存根,它只是加載配置文件中描述的所有應用程序的組件和模塊。這會導致所有可以裝載的程序集都被加載,所以如果出現錯誤,它會被找到。這個功能只是放在一個單元測試中。

+0

我喜歡這個建議。我一定會考慮這個。我正在朝着另一個方向是建立一個工具來加載在bin文件夾中的組件,調用GetReferencedAssemblies()和搜索情況下的文件名相同,但版本號是不同的(該工具將通過構建服務器上運行)。儘管我喜歡你的解決方案,所以我也必須考慮它。謝謝! – JMarsch