我們的媒體中心加載項作爲一個駐留在GAC(mediabrowser.dll)中的DLL提供,我們允許用戶通過引用我們的DLL和訪問來爲我們的加載項編寫擴展預定義的可擴展性點。.Net加載項和版本號
在加載時,我們通過插件目錄搜索,加載目錄中的所有程序集,在程序集中搜索實現IPlugin的類型,並在插件的實例上執行initialiaztion例程。我知道這不是最穩健的設計(例如:我們可能想在稍後查看appdomain隔離插件),但它現在可以正常工作。
就目前來看,這似乎工作正常,除了一個大的警告。
當插件編寫者編譯插件時,插件引用mediabrowser.dll與特定版本。稍後當我們修改我們的DLL(修復錯誤或添加功能)時,所有針對mediabrowser.dll break的早期版本編寫的插件。
我已經想了幾個解決方案,這個問題(注意程序集是在GAC):
- 船舶與mediabrowser.dll發行者策略將重定向mediabrowser.dll的所有早期版本兼容到當前版本(這也必須在GAC中)。
- 運送一個單獨的程序集,其中包含所有固定的擴展點和合同,對於更改此程序集要格外謹慎,讓插件作者鏈接此程序集。 (但仍然着眼於使用發佈者策略對接口進行非重大更改)
- 讓第三方擔心這個問題,並利用MEF或其他一些處理此類內容的框架。
- Hookup AppDomain.CurrentDomain.Assembly將程序集的早期版本解析並解析爲當前版本。這隻有在該特定版本的程序集不在GAC中時纔有效。
是否有任何其他解決方案來解決這個問題?
更新我結束了選項去4.
+1。但是你可能想改變這個問題的標題,使它更清晰一些? – 2009-06-11 08:15:28
我正在爲標題苦苦掙扎。任何人都可以拿出更好的?只要繼續編輯這個,沒有難過的感覺。 – 2009-06-11 08:16:31