You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:00:55