我有10個項目的解決方案。許多項目都依賴於名爲foo.dll
的第三方DLL。具有多個項目的解決方案依賴於相同的二進制參考
的問題是,當我在Visual Studio升級FOO,不知何故,當我去到對象瀏覽器它表明我的foo.dll
兩個版本。
我如何可以找出哪些項目引用舊版本foo.dll的,所以我可以升級所以在所有項目中唯一一個依賴?
我有10個項目的解決方案。許多項目都依賴於名爲foo.dll
的第三方DLL。具有多個項目的解決方案依賴於相同的二進制參考
的問題是,當我在Visual Studio升級FOO,不知何故,當我去到對象瀏覽器它表明我的foo.dll
兩個版本。
我如何可以找出哪些項目引用舊版本foo.dll的,所以我可以升級所以在所有項目中唯一一個依賴?
這是你只想做一次的事情。
我向你推薦的是獲得記事本。是的,記事本。
打開您的每個項目的.csproj文件。
在XML中將會有一段描述被引用的DLL,包括路徑等。即使它們從GAC中出來,.NET鏈接器使用的版本等也將會是包含在文件中。整個參考行必須完全匹配。
將這些與您認爲正確的項目進行比較。
在.NET中處理引用是其中最糟糕的部分之一。歡迎到地獄DLL V2.0 :(
聽起來你已經在GAC中安裝了兩個版本的Foo.dll。 退房gacutil刪除舊的。
如果它只是一個文件引用,然後在每個項目中,打開「引用」和「富」點擊右鍵,選擇屬性。它會在結果屬性窗口中告訴你如版本的信息。
通常以這樣的依賴關係,最好的辦法是讓在稱爲「依賴性」這些類型在其中的DLL項目水平(但不是實際的解決方案的一部分),一個單獨的文件夾。
我也覺得你的服務器上的一些構建自動化(TFS =團隊建設,SVN =巡航控制等)將組裝的正確版本複製到建立之前bin文件夾。
有很多方法去與組件,很容易搞混一個被用來在其通過各種應用程序。值得花一些時間以可模版的方式解決這個問題,這可以應用於所有未來的項目。
我明白這個問題,但我不知道你問正確的問題。讓我解釋一下.NET如何選擇一個引用的程序集。
集引用可以浮動或固定(右鍵單擊項目引用文件夾中的程序集,選擇屬性,查找「特定版本」) 如果版本處於浮動狀態,.NET將查找並使用最新的版本 它是有意義的以「固定」引用的版本,以便避免您描述的問題(即安裝新版本的產品不會中斷您的應用程序)。
程序集可以位於全局程序集緩存中,也可以位於文件系統中。您應該選擇一種方法並在整個項目中一致地使用它,以便至少知道在哪裏尋找。
如果你理解了這兩個方面,你應該沒有問題(當然,至少在出現問題時你應該知道該怎麼做)。如果您固定版本並進行升級,則必須打開您的10個項目並升級參考文獻 - 但您無需進行商業升級。
如果您讓您的版本浮動,所有引用將自動選取安裝的最新版本。如果您將程序集放入GAC中,則無需搜索您的搜索路徑和文件系統以查找剩餘部分和DLL文件的可疑副本。
我覺得最好的答案是只有一個項目有這個依賴的時候這是可行的。它可以讓你在一個地方處理它。
如果這意味着該項目將需要包含在DLL周圍的一個可笑的胖包裝庫,這可能不是最好的方法。但至少考慮一下。
我有這個相同的問題。引用項目B.
項目A 項目C引用的項目d,其中引用的項目B. 這導致項目C不得不項目B. 我擺脫項目d和清理項目C的引用(在代碼), ,但對項目B的引用仍然存在,我想作爲指向項目D的bin文件夾的二進制引用。
我更新了Visual Studio中的項目B. 當我作爲啓動項目C運行時,它拋出了這個錯誤。
爲了解決這個問題,我進入了Project C的引用並刪除了未使用的引用。
順便說一下,你的實際問題 - 如何找出問題的DLL在哪裏生活 - 可以更容易地回答這樣的問題: 1.進入資源管理器(此處爲Window 7說明),然後搜索整個代碼文件夾.dll。 2.在資源管理器中爲FileVersion添加列並對此列進行排序。瞧!