การติดตั้งเริ่มต้นของ SQLite แบบหลายสถาปัตยกรรม (x86, x64) จาก NuGet จะแสดงพฤติกรรมที่คุณอธิบายไว้ หากคุณต้องการโหลดเวอร์ชันที่ถูกต้องสำหรับสถาปัตยกรรมจริงที่. NET runtime เลือกที่จะรันแอปพลิเคชันของคุณบนเครื่องของคุณคุณสามารถให้ DLL loader เป็นคำแนะนำเกี่ยวกับตำแหน่งที่จะค้นหาไลบรารีที่ถูกต้องดังนี้
เพิ่มการประกาศสำหรับการเรียกใช้ฟังก์ชัน kernel32.dll ไปยัง SetDLLDirectory () ก่อน Program.Main () ของคุณ:
[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));