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

.NET MAUI发布模式下关闭应用后SQLite数据库文件丢失问题求助

.NET MAUI发布模式下关闭应用后SQLite数据库文件丢失问题求助

我最近碰到一个特别棘手的问题,折腾好久都没解决:我的.NET MAUI应用使用SQLite数据库,调试模式下完全正常——应用运行期间CRUD操作没问题,关闭再打开后数据也能稳稳保留,但切换到发布模式后,只要完全关闭应用,数据库文件就直接消失了!

环境信息

  • .NET MAUI版本:8.0(我还做了个最小复现项目,用的是9.0)
  • SQLite库:SQLite-net-pcl 1.8.116(复现项目用的1.9.172)
  • 目标平台:Android API 34、iOS 17+
  • Android上的数据库路径:/data/data/com.better.mobileapp/files/BetterSQLite.db3

哪些功能正常

  • 应用启动时数据库初始化成功
  • 所有数据表都能正确创建
  • 应用运行期间的增删改查操作完全正常
  • Android上通过文件管理器验证过文件权限是对的
  • 数据库文件确实存在,大小也符合预期(存了数据后大概140KB)

哪里出问题了

  • 完全关闭应用再重新打开,数据库文件就没了
  • 全程没有抛出任何异常或错误提示
  • 存放数据库的目录还在,但.db3文件被删掉了
  • Android和iOS两个平台都出现这个问题

我已经尝试过的方法

  • 用AI工具找解决方案,试过配置平台特定的存储路径,但没用
  • 想通过设备日志排查,但关闭应用后日志也跟着停了,不知道怎么强制保留日志
  • 做了一个最小复现项目,代码结构和实际项目一致,问题依然存在

关键初始化代码

public static async Task InitializeAsync()
{
    if (_connection != null) return;
    await _semaphore.WaitAsync();
    try
    {
        if (_connection != null) return; // 加锁后再次检查
        string dbPath = Path.Combine(FileSystem.AppDataDirectory, "BetterSQLite.db3");
        
        //// 下面这段是测试用的删除代码,我已经注释掉了
        //if (File.Exists(dbPath)) 
        //    File.Delete(dbPath);
            
        _connection = new SQLiteAsyncConnection(dbPath);
        // 创建不存在的数据表
        await _connection.CreateTablesAsync<...,...>();
        _logger?.LogInformation("SQLite数据库初始化成功,路径:{DbPath}", dbPath);
    }
    catch (Exception ex)
    {
        _logger?.LogError(ex, "SQLite数据库初始化失败");
        throw new InvalidOperationException("数据库初始化失败", ex);
    }
    finally
    {
        _semaphore.Release();
    }
}

我现在完全摸不着头脑,有没有大佬遇到过类似的情况?或者能给我一些排查的方向?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:33:03