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

UWP应用Debug模式可连SQLite,Release模式触发空值异常求助

问题排查思路

从异常栈可以看出,Release模式下调用SQLiteConnection构造函数时,内部的Path.Combine收到了空的path1参数,结合你的代码,说明ApplicationData.Current.LocalFolder.Path在Release模式下返回了null。以下是具体排查步骤:

  • 排查.NET Native编译影响
    UWP的Release默认启用.NET Native编译,该编译会对代码进行激进优化,可能导致部分UWP API的初始化逻辑变化。临时禁用.NET Native:右键项目 → 属性 → 生成 → 取消勾选"启用.NET Native工具链",重新编译Release版本测试。如果问题消失,说明是.NET Native与System.Data.SQLite的兼容性问题。

  • 显式验证路径参数
    修改代码,在创建连接前先验证关键参数,避免隐式拼接带来的定位困难:

    var localFolder = ApplicationData.Current.LocalFolder;
    if (localFolder == null)
    {
        throw new InvalidOperationException("无法获取应用本地文件夹");
    }
    if (string.IsNullOrEmpty(DB_NAME))
    {
        throw new InvalidOperationException("数据库名称未定义");
    }
    
    var dbFullPath = Path.Combine(localFolder.Path, DB_NAME);
    Connection = new SqliteConnection($"Data Source={dbFullPath}");
    

    重新编译Release版本,观察抛出的异常是否更明确,或者通过日志记录localFolder.Path和DB_NAME的实际值。

  • 检查条件编译常量
    确认DB_NAME的定义是否包含条件编译逻辑(比如#if DEBUG),导致Release模式下DB_NAME为空字符串。可以在代码中添加日志输出DB_NAME的值,或者直接查看常量定义。

  • 替换SQLite NuGet包
    System.Data.SQLite对UWP的.NET Native支持并不完善,建议替换为微软官方维护的Microsoft.Data.Sqlite包,该包针对UWP和现代.NET环境做了优化,兼容性更好。替换后调整命名空间引用即可:

    using SqliteConnection = Microsoft.Data.Sqlite.SqliteConnection;
    
  • 确认应用权限与目录状态
    虽然LocalState是应用私有目录无需额外权限,但可以检查Release模式下应用是否能正常访问该目录:先通过代码尝试在LocalState下创建一个临时文件,验证目录的可用性,排除目录访问异常导致的路径获取失败。

内容的提问来源于stack exchange,提问作者Hele

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:59:52