我有一個有趣的挑戰,我想知道如果有人在這裏可以給我一些方向。動態調用程序集時出現複雜的API問題
我在寫一個運行在網絡上的.Net窗體表單應用程序,並使用SQL Server來保存和提取數據。
我想提供一個迷你「插件」API,開發人員可以在其中構建自己的程序集並實現特定的接口(IDataManipulate)。這些程序集可以被我的應用程序用來調用接口函數並做一些事情。
我可以使用我的API創建程序集,將文件複製到本地硬盤驅動器中的文件夾,並將我的應用程序配置爲使用Reflection從實現的接口(IDataManipulate.Execute)調用特定函數。
問題:由於應用程序將被安裝在網絡中的多個工作站
,是不可能複製插件DLLS用戶將創建到每個機。
解決方案我想:
解決方案1
複製API DLL到網絡共享。
問題:
需要AllowPartiallyTrustedCallersAttribute,這需要.Net唱歌,我不能強迫我的用戶。
溶液2(優選的)
序列化的dll對象,將其保存到數據庫中,反序列化和呼叫IDataManipulate.Execute。
問題:
反序列化後,我嘗試將其轉換爲IDataManipulate對象,但返回錯誤查找實際的dll文件。
解決方案3個
保存到數據庫的DLL字節的byte []和每次用戶啓動我的應用程序時重新創建DLL在本地PC上。
問題:
Dll可能有依賴關係,我不知道我是否可以檢測到。
任何建議將不勝感激。
謝謝
@David,你是否嘗試實施解決方案#2?因爲如果我可以避免在運行時創建DLL,它將是理想的。 – 2010-04-29 16:40:43
如果使用AssemblyResolve事件,則可以返回從任何流對象加載的程序集對象。這將允許您從數據庫加載它,而不必先將其保存到磁盤。 – David 2010-04-29 17:58:29