4

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

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

任何帮助,将不胜感激。

4

1 回答 1

2

SQLite 程序集应该在您的路径中,或者在您的应用程序目录中,而不是在您的模块目录中。如果是这种情况,并且您仍然遇到相同的错误,那么这听起来与我在此处发布的完全相同的问题,使用以下解决方案:

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;
于 2012-12-31T10:23:16.457 回答