MEF插件找不到引用的库

时间:2012-12-31 10:01:30

标签: c# .net plugins dll mef

我正在使用MEF实现一个插件系统,到目前为止它运行良好。我最近遇到了一个问题:主应用程序使用SQLite数据库,现在我有一个必须访问该数据库的插件。当我将插件复制到我的插件目录时,我会正确地选择它,但是一旦它尝试使用SQlite访问任何东西,我就会得到一个System.IO异常,告诉我它无法找到它依赖的sqlite dll。

我也尝试将sqlite dll复制到插件目录中,但它仍然无效。我的主应用程序中引用的任何库是否也不应该在我的插件中可用?即使不是,如果它们位于同一目录中,插件是否应该找到它们?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分: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;