.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
相关产品推荐
相关产品推荐

