在處理插件程序集的子目錄時,存在一個衆所周知的問題,即一旦它們嘗試從其子目錄加載它們各自的依賴項,這些程序集就無法加載。一種解決方案是在初始化時在AppDomain中加載其PrivateBinPath
設置在它們的AppDomainSetup
對象中的插件。但是,這會導致關於編組/跨AppDomain通信的其他困難,特別是如果插件應該提供一些GUI。插件AppDomains解決方法
當安全性方面的優先級較低(非關鍵性的實用程序應用程序,由於錯誤的插件導致崩潰時沒有嚴重問題),我有以下想法:在應用程序啓動時,應該搜索所有插件目錄,並且應該創建一個新的AppDomain,它的bin路徑中包含這些目錄。然後,整個應用程序及其GUI在新的AppDomain中運行,以及所有插件。
在特定情況下,是否有任何理由避免該解決方案?或者有什麼理由可以解釋爲什麼這個解決方案不可行?
我認爲,如果你的主界面在相同的AppDomain作爲插件運行,如果插件崩潰,主UI可能會崩潰。你使用插件框架還是「RYO」? – IAbstract
@IAbstract:即使在另一個AppDomain中運行,也不要崩潰插件通常也會導致主UI失敗?畢竟,插件中引發的任何異常都會跨AppDomain邊界進行編組,並使主應用程序退出,除非我處理異常。在我的特殊情況下,這是RYO - 我研究了Addin框架並閱讀了許多關於它的文章,但它們都提到了核心應用程序和插件之間極簡主義的界面,而不是複雜和深層嵌套的對象層次結構。需要轉移。 –