2012-08-22 46 views
2

我有一個問題,到目前爲止無法解決它。相同引用程序集的多個版本

我有一個組件(一個可執行.NET 4.0),其從一個文件夾信息加載插件(.DLL組件)。主可執行文件引用了telerik.windows.controls.dll並且運行良好。

現在我編寫使用Telerik的庫的新版本,而更具體的裝配telerik.windows.controls.GanttView一個新的插件。問題在於,GanttView控件使用較新版本的telerik.windows.controls.dll,因此插件無法加載telerik引用的程序集,導致崩潰。

我知道我可以通過將所有升級到最新的引用程序集(telerik)來解決此問題,但這些控件尚未由我的團隊進行QA /測試,以確保不引入新的錯誤。

所以,總結一下吧:

MAIN.EXE - > A.DLL - > X.dll(V1)

然後我添加一個名爲B.DLL所以新的插件:

main.dll - > b.dll-> X.dll(v2) + ------------> X.dll(v1)

所以問題是whather我的plguin可以參考一個不同版本的程序集(以及一個它的引用程序集)也可以從不同的位置加載embly。

謝謝。

回答

0

簡短的回答是否定的,如果新的DLL具有相同的彙編信息。

較長的答案是,在應用程序域,可以加載特定的程序集只有一次(這除非你創造更多的自己,你不會有一個以上的)。再次,這是假設我們正在討論的程序集(dll)具有相同的程序集信息。如果您想加載較新的程序集,則必須創建一個單獨的應用程序域。但是,那麼你將無法在最初的應用領域使用它,在那裏你的其他控件是'生活'的。

+0

我實際上有兩個組件,主要的可執行文件,它引用舊版本Telerik的,那麼一個插件(通過其自己的應用領域主要的exe加載)引用新Telerik的。我想新的telerik試圖訪問放置在主要可執行文件的原始代碼庫文件夾中的依賴關係(其他程序集)。我無法爲插件創建其他應用程序域,因爲這是整個解決方案中的一個主要體系結構更改。 – Batiatto

+0

你可以檢查它是否可能:創建一個新的vs項目。添加對兩個Telerik組件的引用。如果vs不抱怨,我想這將是沒有問題的。否則,我覺得運氣不好。 – Maarten

1

我們在我們的應用中的一些點來實現這一點。我們所做的是創建舉行的過時DLL的bin目錄中的文件夾的方式,然後添加以下行到被引用舊的dll文件的app.config ...

<runtime> 
    <assemblyBinding xmlns = "urn:schema-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity 
       name = "YourAssembly" 
       /> 
      <codeBase version="YourAssemblyVersion" href = "FolderWithinBinDirectory/YourAssembly.dll"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

可能存在對它更多,但我認爲這就是我們必須做的。

相關問題