NuGet的SQLite多体系结构(x86,x64)版本的默认安装显示了您描述的行为。如果您希望为.NET运行时选择在计算机上运行应用程序的实际体系结构加载正确的版本,则可以给DLL加载器提示有关在何处找到正确的库的信息,如下所示:
在Program.Main()之前,将对kernel32.dll函数调用的声明添加到SetDLLDirectory():
[System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)]
[return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
static extern bool SetDllDirectory(string lpPathName);
然后使用您自己的方法确定正确的子目录,以查找特定于体系结构的版本'SQLite.Interop.dll'。我使用以下代码:
[STAThread]
static void Main()
{
int wsize = IntPtr.Size;
string libdir = (wsize == 4)?"x86":"x64";
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
SetDllDirectory(System.IO.Path.Combine(appPath, libdir));