Dot-Net

項目參考 DLL 版本地獄

  • March 1, 2010

我們在讓 Visual Studio 從我們的一個項目中獲取最新版本的 DLL 時遇到問題。

我們有多個類庫項目(例如 BusinessLogic、ReportData)和許多 Web 服務,每個服務都引用了我們編寫的連接 DLL(這個對連接 DLL 的引用是問題所在)。

我們總是指向 bin/debug 文件夾中的 DLL 引用(這是我們為任何給定項目建構的地方),並且所有自定義 DLL 引用都有 CopyLocal = True 和 SpecificVersion = False

ReportData 引用了業務邏輯(也引用了連接性——我不明白為什麼這會導致問題,但認為值得一提)

奇怪的是,當您點擊“添加引用”並瀏覽到 Connectivity/bin/debug - 將滑鼠懸停在 DLL 文件上時,會顯示正確的(最新)版本(版本和文件版本總是一起遞增),但是當您點擊確定時,會拉出以前的版本號。即使我查看顯示最新版本號的目前項目調試文件夾(其中復製本地將在編譯後放置 DLL)。- 我無法在 Visual Studio 之外找到以前版本的 DLL,但在該項目引用中它具有舊版本 - 即使路徑是正確的。

我不知道它可能從哪裡獲得舊版本。或者甚至為什麼它想要那個。

這可能是我遇到過的最令人沮喪的問題。

有誰知道如何確保最新版本通過(最好是自動或編譯時)。

編輯:

雖然不完全是我正在處理的場景,但我正在閱讀這篇文章,它在某處提到了 CLR 忽略修訂號。可以理解(儘管這在以前不是問題——我們正在修訂 39),所以我想我會更新內部版本號,但仍然沒有用。儘管我會更新次要版本號並查看是否有任何不同,但我嘗試了一次徒勞的嘗試。

我並不是說這是答案,因為我必須先檢查很多東西,但從表面上看,這似乎解決了我的問題……

進一步編輯:在其他類庫中,這似乎已經解決了問題,但是在測試 Windows 應用程序中,它仍然通過:(

如果我再次增加次要版本號,同樣的問題會再次出現,但我會留下錯誤的版本。

進一步編輯 - 我創建了一個全新的項目,添加了一個參考,但仍然有完全相同的問題。這表明問題僅限於我引用的項目。希望我知道為什麼!

以前有人遇到過這個問題並且知道如何解決嗎?

幫助!

為了克服這個問題,我刪除了所有引用,然後將它們全部重新添加回來。我不知道為什麼這是解決方案。

在一個項目中,一個 DLL 可能不正確,而正是這個不正確的 DLL 被 Visual Studio 提取並使用。

編輯:其他時候發生此錯誤是由於目前項目中引用的 DDL (A) 也被另一個 DLL (B) 引用。不重建這個其他 DLL (B) 似乎阻止了 VS 在目前項目中引用正確版本的 DLL (A),因此它帶來了舊版本的 DLL (A)。

為了避免dll 地獄,我建議您lib在項目中創建一個文件夾並將所有共享程序集放在此文件夾中。接下來,您僅從該文件夾添加引用。這樣,您的項目是自包含的,並且您確切地知道它從哪裡選擇引用。如果您想使用較新版本更新某些程序集,請將其複製到該lib文件夾並重建您的項目。

還要確保您沒有將引用的程序集放入 GAC,因為它們可能會首先被拾取。

引用自:https://stackoverflow.com/questions/2357476