.NET MAUI中SQLite.SQLiteConnection类型初始化异常求助
解决.NET MAUI中SQLiteConnection类型初始值设定项异常
1. 清理冲突的NuGet包
你当前安装的SQLitePCLRaw包存在重复依赖冲突:SQLitePCLRawEx.bundle_green已经包含了SQLitePCLRaw.core、SQLitePCLRaw.provider.sqlite3及各平台适配组件,额外安装的同系列包会引发初始化冲突。
按以下操作处理:
- 打开项目的
.csproj文件,删除这些重复的引用:<PackageReference Include="SQLitePCLRaw.core" Version="2.1.0" /> <PackageReference Include="SQLitePCLRaw.provider.sqlite3" Version="2.1.0" /> <PackageReference Include="SQLitePCLRawEx.provider.dynamic_cdecl" Version="2.1.0" /> - 保留以下必要包即可:
<PackageReference Include="Microsoft.Toolkit.Mvvm" Version="7.1.2" /> <PackageReference Include="sqlite-net-pcl" Version="1.6.292" /> <PackageReference Include="SQLitePCLRawEx.bundle_green" Version="2.1.0" /> - 右键项目→选择「清理」,再点击「重建解决方案」;手动删除项目目录下的
bin和obj文件夹后重新生成。
2. 添加SQLitePCLRaw初始化代码
.NET MAUI中必须在应用启动时初始化SQLitePCLRaw,否则会触发类型初始化异常。打开MauiProgram.cs,修改CreateMauiApp方法:
using Microsoft.Maui.LifecycleEvents; using SQLitePCL; namespace YourAppNamespace; public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); }) // 新增SQLite初始化逻辑 .ConfigureLifecycleEvents(events => { #if ANDROID events.AddAndroid(android => android.OnCreate((activity, bundle) => { Batteries_V2.Init(); })); #elif IOS || MACCATALYST events.AddiOS(ios => ios.FinishedLaunching((app, options) => { Batteries_V2.Init(); return true; })); #elif WINDOWS events.AddWindows(windows => windows.OnLaunched((args) => { Batteries_V2.Init(); })); #endif }); // 注册你的数据库服务(如果有) // builder.Services.AddSingleton<YourDatabaseService>(); return builder.Build(); } }
3. 修正数据库路径获取逻辑
避免使用硬编码路径,改用MAUI提供的文件系统API获取合法的数据库存储路径:
using System.IO; using Microsoft.Maui.Storage; public string GetDatabasePath() { // 获取应用专属的本地数据目录 string appDataDir = FileSystem.AppDataDirectory; // 定义数据库文件名 string dbFileName = "YourDatabase.db3"; // 组合完整路径 return Path.Combine(appDataDir, dbFileName); }
创建SQLite连接时使用该路径:
var dbPath = GetDatabasePath(); var connection = new SQLiteConnection(dbPath);
4. 验证版本兼容性
如果上述步骤无效,尝试统一包版本:将sqlite-net-pcl升级到最新稳定版(如1.8.116),同时将SQLitePCLRawEx.bundle_green升级到匹配版本(如2.1.8),再重复步骤1-3。
内容的提问来源于stack exchange,提问作者edodoe
相关产品推荐
相关产品推荐

