我写了一个小的 shell 扩展,存根可以工作,但希望它从 SQLite 数据库中读取一些信息。
System.Data.SQLite.dll
:仅托管的核心程序集SQLite.Interop.dll
: 本机互操作程序集
过去,我已经使用这两个 DLL 成功构建了桌面应用程序,方法是将它们放在与文件相同的文件夹中.exe
。
但是在shell扩展的情况下,没有.exe
文件这样的东西,那么我应该把这些DLL放在哪里呢?
我写了一个小的 shell 扩展,存根可以工作,但希望它从 SQLite 数据库中读取一些信息。
System.Data.SQLite.dll
:仅托管的核心程序集SQLite.Interop.dll
: 本机互操作程序集过去,我已经使用这两个 DLL 成功构建了桌面应用程序,方法是将它们放在与文件相同的文件夹中.exe
。
但是在shell扩展的情况下,没有.exe
文件这样的东西,那么我应该把这些DLL放在哪里呢?
您可能已经知道,程序集是相对于 .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?