4

MEF を使用してプラグイン システムを実装していますが、これまでのところうまく機能しています。しかし、最近問題が発生しました。メイン アプリケーションは SQLite データベースを使用しており、そのデータベースにもアクセスする必要があるプラグインを使用しています。プラグインをプラグイン ディレクトリにコピーすると、mef は正しく取得しますが、SQlite で何かにアクセスしようとするとすぐに、依存する sqlite dll が見つからないことを示す System.IO 例外が発生します。

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 に答える