【问题标题】:MEF plugin can't find referenced libraryMEF 插件找不到引用的库
【发布时间】:2012-12-31 10:01:29
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: c# .net plugins dll mef


    【解决方案1】:

    SQLite 程序集应该在您的路径中,或者在您的应用程序目录中,而不是在您的模块目录中。如果是这种情况,并且您仍然遇到相同的错误,那么这听起来与我发布的 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;
    

    【讨论】:

    • 谢谢,这为我指明了正确的方向。问题是主应用程序中引用的 DLL 引用的 SQLite dll 版本与插件(1.0.82.0 和 1.0.83.0)不同。我刚刚更新了参考,现在它可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多