2012-12-31 24 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