From 3d253a2f541fb50da308f97962c517841c5c6356 Mon Sep 17 00:00:00 2001 From: Magomed Date: Thu, 30 Jul 2026 14:27:41 +0300 Subject: [PATCH] Fix SQLite BadImageFormat by disabling Prefer32Bit and syncing interop arch. Ensure SQLite.Interop.dll next to the exe always matches process bitness from x86/x64. Co-authored-by: Cursor --- src/ElectronicPharmacy/Classes/AppConfig.cs | 11 ++--------- src/ElectronicPharmacy/ElectronicPharmacy.csproj | 2 ++ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/ElectronicPharmacy/Classes/AppConfig.cs b/src/ElectronicPharmacy/Classes/AppConfig.cs index 52affaa..195d2f1 100644 --- a/src/ElectronicPharmacy/Classes/AppConfig.cs +++ b/src/ElectronicPharmacy/Classes/AppConfig.cs @@ -129,7 +129,7 @@ namespace Электронная_Фармация.Classes private static void EnsureSQLiteInteropInBaseDir() { // System.Data.SQLite ожидает SQLite.Interop.dll рядом с exe. - // В релизной поставке DLL часто лежит в подпапках x86/x64. + // Важно: разрядность DLL должна совпадать с процессом (Prefer32Bit => x86). if (_sqliteInteropPrepared) { return; @@ -144,13 +144,6 @@ namespace Электронная_Фармация.Classes var baseDir = AppDomain.CurrentDomain.BaseDirectory; var targetDll = Path.Combine(baseDir, "SQLite.Interop.dll"); - if (File.Exists(targetDll)) - { - _sqliteInteropPrepared = true; - return; - } - - // AnyCPU в .NET Framework обычно выбирает разрядность процесса автоматически. var archFolder = Environment.Is64BitProcess ? "x64" : "x86"; var sourceDll = Path.Combine(baseDir, archFolder, "SQLite.Interop.dll"); var sourcePdb = Path.Combine(baseDir, archFolder, "SQLite.Interop.pdb"); @@ -159,7 +152,7 @@ namespace Электронная_Фармация.Classes { if (File.Exists(sourceDll)) { - Directory.CreateDirectory(baseDir); + // Всегда подкладываем DLL нужной разрядности (даже если в корне уже лежит "чужая"). File.Copy(sourceDll, targetDll, overwrite: true); var targetPdb = Path.Combine(baseDir, "SQLite.Interop.pdb"); diff --git a/src/ElectronicPharmacy/ElectronicPharmacy.csproj b/src/ElectronicPharmacy/ElectronicPharmacy.csproj index 3ddadbc..46400ed 100644 --- a/src/ElectronicPharmacy/ElectronicPharmacy.csproj +++ b/src/ElectronicPharmacy/ElectronicPharmacy.csproj @@ -20,6 +20,7 @@ AnyCPU + false true full false @@ -30,6 +31,7 @@ AnyCPU + false pdbonly true bin\Release\