2012-12-31 31 views
4

我正在實施一個MEF插件系統,迄今爲止它的工作效果很好。我最近遇到了一個問題:主應用程序使用SQLite數據庫,現在我有一個插件也必須訪問該數據庫。當我將插件複製到我的插件目錄時,mef會正確地選擇它,但只要它嘗試訪問SQl​​ite的任何內容,我就會得到一個System.IO異常,告訴我它無法找到它所依賴的sqlite dll。MEF插件找不到引用的庫

我試着將sqlite dll複製到插件目錄,但它仍然不起作用。我的主應用程序中引用的任何庫都不應該在我的插件中可用嗎?即使沒有,插件也不應該找到這些庫,如果他們在同一個目錄中?

任何幫助,將不勝感激。

回答

2

SQLite程序集應該位於你的路徑或應用程序的目錄中,而不是你的modules目錄中。如果是這樣的話,你仍然得到同樣的錯誤,那麼它聽起來就像是完全相同的問題我貼here,用以下解決方案:

public static class AssemblyResolverFix 
{ 
    //Looks up the assembly in the set of currently loaded assemblies, 
    //and returns it if the name matches. Else returns null. 
    public static Assembly HandleAssemblyResolve(object sender, ResolveEventArgs args) 
    { 
    foreach(var ass in AppDomain.CurrentDomain.GetAssemblies()) 
     if(ass.FullName == args.Name) 
     return ass; 
    return null; 
    } 
} 

//in main 
AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolverFix.HandleAssemblyResolve; 
+0

謝謝,這個我指出了正確的方向。問題是主應用程序中引用的DLL引用了不同於插件(1.0.82.0和1.0.83.0)的SQLite dll版本。我只是更新了參考,現在它正在工作。 – Splatbang