2013-04-04 56 views
2

我写了一个小外壳扩展,存根工程,但希望它从SQLite数据库读取一些信息。如何从shell扩展加载DLL?

SQLite needs 2 DLLs

  • System.Data.SQLite.dll:管理,唯一的核心组件
  • SQLite.Interop.dll:本地互操作程序集

在过去,我已经成功地构建桌面使用这2个DLL文件,通过将应用程序他们在与.exe文件相同的文件夹中。
但是在shell扩展的情况下,没有这样的东西作为.exe文件,所以我应该在哪里放这些DLL?

注意:现在我用Regasm部署外壳扩展,但我打算将它部署在将来的WiX

回答

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?