我面临一个问题,其中一行代码在调试模式下工作,但不在发布模式下工作。我有一个 UWP 应用程序,它连接到 localState 文件夹中的 sqlite 数据库,执行此操作的代码行是下面的代码行
Connection = new SqliteConnection($"Data Source={ApplicationData.Current.LocalFolder.Path}\\{DB_NAME}");
我正在使用 SQLite 开发团队的 System.Data.SQLite 包,通过 NuGet 安装,并按如下方式导入
using SqliteConnection = System.Data.SQLite.SQLiteConnection;
逻辑是:我在电脑上的某个地方有一个数据库,我必须将数据库复制到 localState 文件夹(已经可以使用),并且我需要打开它才能开始处理数据,超级基本的东西。问题来了:在调试时一切都按预期工作,在发布模式下发布项目会导致第一行共享代码出现以下异常
2024-08-09 11:37:58 - Value cannot be null.
Parameter name: path1 - at System.IO.Path.Combine(String, String) + 0x50
at System.Data.SQLite.SQLiteConnection..ctor(String, Boolean) + 0x34b
at Prime.Db.Database.<Inizializza>d__12.MoveNext() + 0x16f
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() + 0x21
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task) + 0x70
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task) + 0x38
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task) + 0x17
at System.Runtime.CompilerServices.TaskAwaiter.GetResult() + 0xb
at Prime.SplashScreenPage.<CaricamentoIniziale>d__8.MoveNext() + 0x3e2a
- Prime.Db.Database+<Inizializza>d__12 - <Inizializza>d__12
我有点困惑,因为我不知道这两种情况有什么区别,所以我不知道手该放哪里。
你们对这个案子有什么线索吗?
我们将不胜感激。
提前致谢。
好的,
这是 System.Data.SQLite 版本 1.0.118.0(最后一个稳定版本)问题。
在 https://system.data.sqlite.org/index.html/doc/trunk/www/news.wiki,您可以在版本历史记录部分的正下方找到较新的 1.0.119.0 发行说明。在第 4 点报告了以下句子
为项目启用 PublishSingleFile 属性时,避免 Path.Combine 方法中出现 NullReferenceException。根据论坛帖子66a0d2716a
在链接的论坛帖子中可以找到更多详细信息。如果您遇到同样的问题,您可以快速阅读帖子以查看可用的解决方法,我决定降级到版本 1.0.117.0,一切都按预期进行。
仅此而已。