不知怎的,我很幸運,從來沒有來處理這個問題,儘管我認爲這是一個常見的一種:使用不同版本的參考DLL
我有一個web項目,姑且稱之爲SomeProject
。 SomeProject
有一個第三方庫的參考,我們稱它爲SomeThirdParty
,版本1.0。 SomeProject
也有一個本土類圖書館的參考,我們稱之爲SomeLibrary
。 SomeLibrary
也有參考SomeThirdParty
,但是不同的版本(比如說2.0)。
版本1.0和2.0的SomeThirdParty
共享大部分相同的簽名,但是是不同的實現。如果可能的話,我需要SomeProject
才能使用1.0實現,而SomeLibrary
才能使用2.0實現。
我使用其對log4net的引用編譯SomeProject
。結束於bin目錄的DLL是SomeProject
引用的DLL。在運行時,從SomeLibrary
運行的代碼,它試圖從SomeThirdParty
2.0版本執行代碼,當然失敗時,拋出一個FileLoadException: Could not load file or assembly '
SomeThirdParty , Version=2.0.0.0, Culture=[etc.]' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.
很顯然,我可以升級SomeProject
到較新的DLL或降級SomeLibrary
到舊DLL,但是由於許多原因它不是理想的。
我認爲正確的答案涉及在GAC中安裝SomeThirdParty,但我不確定如何去做這件事,以及它會如何影響其他開發人員和服務器。
任何建議,你可能有讚賞。
感謝您的幫助。
這就是我的想法。我真的不想走這條路,因爲這意味着我們的所有開發人員的機器,所有的服務器和任何新來的開發人員都會在GAC中安裝這些程序集。但是如果我們找不到替代品,我會牢記這一點。謝謝。 – 2011-05-26 16:44:12