我编写了一个小的shell扩展,存根工作,但希望它从SQLite数据库中读取一些信息。
System.Data.SQLite.dll
:仅管理核心程序集SQLite.Interop.dll
:native interop assembly 过去,我已经使用这两个DLL成功构建了桌面应用程序,方法是将它们放在与.exe
文件相同的文件夹中。
但是在shell扩展的情况下,没有.exe
文件,所以我应该把这些DLL放在哪里?
答案 0 :(得分: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?