2013-07-30 151 views
10

enter image description here不同項目中的兩個版本的相同的DLL

我有一個解決方案與多個項目。我需要在兩個不同的項目中引用不同版本的相同組件。截至目前發生的事情是,只有最新版本的dll纔會被複制到bin文件夾中。因此,依賴於舊版本的DLL失敗,錯誤

Could not load file or assembly xxxx or one of its dependencies. 
The located assembly's manifest definition does not match the 
assembly reference. 

有沒有辦法去使用基於項目的DLL的特定版本的應用程序?

+11

歡迎DLL地獄 –

+0

請提供詳細信息,這需要執行哪些dll中的版本。他們都在同一個目錄嗎?你可以使用regasm和程序集緩存嗎?一個小例子或圖表可以幫助你解決這個問題。 –

回答

3

是的,你可以在每個項目引用同一個DLL的特定版本。我會建議將這兩個版本的dll放在GAC中。在您的引用項目中,設置Copy Local = false和Specific Version = true。

你可以在沒有GAC的情況下使用你的配置文件和assembly binding directives(因爲共享dll不能在同一個文件夾中,因爲它們具有相同的名稱),但這是GAC設計的主要問題之一解決。所以我會建議利用它。

+1

應該指出的是,只有組件具有強名稱(=已簽名)時,GAC纔是正確的解決方案。 – Vadim

+0

我使用了組裝裝訂指令。這工作:) – developer747

+0

@ developer747:只是爲了澄清,我說的是配置指令類似探測(http://msdn.microsoft.com/en-us/library/4191fzwb.aspx)。我不是在談論使用bindingRedirect,因爲那實際上不能解決你的問題。 bindingRedirect會導致你的程序集使用相同版本的共享DLL,而不是你說的你需要的不同版本。 –

0

取決於你的觀衆(如果這是一個服務器應用程序,網站,桌面應用爲單個用戶,對於很多用戶桌面應用程序等),你可以騙一點,在一個完全託管一個版本單獨的應用程序域,如Web服務或WCF服務。

例如,假設你的項目是一個Web應用程序:

MyWebApplication 
    - DLL reference to MyLibrary v1.0 
    - Only have internal references which use v1.0 of the library 
    - WCF proxy to http://localhost/MyWebService 

MyWebService 
    - DLL reference to MyLibrary v2.0 
    - Only have internal references which use v2.0 of the library 
+2

對不起,你看過這個問題嗎? – Alex

+1

@Alex問題不分清哪些應用程序的觀衆 - 如果它是一個Web應用程序,而他們是在添加一個WCF服務,位置那麼這個解決方案將工作 - 我已經爲此做確切的原因一次。您可能需要圍繞洗牌幾節課,也許產生一些服務包裝,但它絕對是一個潛在的解決方案,以保持其在服務的領域需要一個版本的代碼,並在該領域所需要的其他版本的代碼web應用程序。根據情況,GAC可能會更好,但這只是另一種選擇。 –

相關問題