2

我写了一个小的 shell 扩展,存根可以工作,但希望它从 SQLite 数据库中读取一些信息。

SQLite 需要 2 个 DLL

  • System.Data.SQLite.dll:仅托管的核心程序集
  • SQLite.Interop.dll: 本机互操作程序集

过去,我已经使用这两个 DLL 成功构建了桌面应用程序,方法是将它们放在与文件相同的文件夹中.exe
但是在shell扩展的情况下,没有.exe文件这样的东西,那么我应该把这些DLL放在哪里呢?

注意:现在我使用Regasm部署 shell 扩展,但我计划将来使用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 回答