2

小さなシェル エクステンションを作成しました。スタブは機能しますが、SQLite データベースから情報を読み取る必要があります。

SQLite には 2 つの DLL が必要です。

  • System.Data.SQLite.dll: マネージドのみのコア アセンブリ
  • SQLite.Interop.dll: ネイティブ相互運用アセンブリ

過去に、これら 2 つの DLL を.exeファイルと同じフォルダーに配置することで、デスクトップ アプリケーションを正常に構築できました。
しかし、シェル拡張の場合、ファイルのようなものは存在しない.exeので、これらの DLL をどこに配置すればよいのでしょうか?

注: 現在、シェル拡張機能をRegasmで展開していますが、将来的にはWiXで展開する予定です。

4

1 に答える 1

0

既にご存じのとおり、アセンブリは .exe およびその .exe.config ファイル内の命令に関連して検出されます。つまり、.dll はそのアセンブリを「手動で」ロードする必要があります。

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveLocally);

static Assembly ResolveLocally(object sender, ResolveEventArgs args)
{
    string path = Path.Combine(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
        new AssemblyName(args.Name).Name + ".dll"
        );
    if (!File.Exists(path))
    {
       return null;
    }

    return Assembly.LoadFrom(path);
}

これは基本的にここと同じです: How to add folder to assembly search path at runtime in .NET?

于 2013-04-04T13:01:59.033 に答える