NuGet 中 SQLite 的多架构(x86、x64)版本的默认安装展示了您描述的行为。如果您想为 .NET 运行时选择在您的机器上运行您的应用程序的实际体系结构加载正确的版本,那么您可以向 DLL 加载程序提供有关在何处找到正确库的提示,如下所示:
在 Program.Main() 之前为 SetDLLDirectory() 添加 kernel32.dll 函数调用的声明:
[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));