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

如何在Xamarin中嵌入SQLite?嵌入式资源.db文件无法定位求助

解决嵌入式SQLite数据库文件找不到的问题

我之前在跨平台项目里也踩过完全一样的坑!你现在的核心问题是搞混了嵌入式资源和普通文件的读取逻辑——嵌入式资源是打包进程序集里的,根本不存在于文件系统中,所以你用File.Exists或者直接拼接路径肯定找不到!而你的appsettings.json能正常读取,大概率是因为它被设置成了「复制到输出目录」,是作为独立文件存在的,和.db的处理逻辑完全不同。

下面是我亲测有效的解决步骤:

1. 先确认嵌入式资源的正确名称

嵌入式资源的全名是「项目命名空间 + 文件名」,比如你的共享项目命名空间是MyApp.Shared,数据库文件叫dbfilename.db,那资源的完整名称就是MyApp.Shared.dbfilename.db。你可以先打印所有资源名来确认:

var assembly = IntrospectionExtensions.GetTypeInfo(typeof(YourSharedProjectClass)).Assembly;
var allResources = assembly.GetManifestResourceNames();
// 用Debug输出所有资源名,找到你的db文件的正确全称
foreach (var name in allResources)
{
    Debug.WriteLine($"Resource Name: {name}");
}

这里的YourSharedProjectClass是你共享项目里的任意一个类,用它来获取程序集会比GetExecutingAssembly更可靠,尤其是跨平台场景。

2. 把嵌入式资源复制到本地存储

因为SQLite需要操作实际的文件,所以你得先把程序集里的资源流读取出来,写入到应用的私有存储目录,然后再连接这个本地文件:

// 获取程序集和资源流
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(YourSharedProjectClass)).Assembly;
var resourceStream = assembly.GetManifestResourceStream("你的资源完整名称,比如MyApp.Shared.dbfilename.db");

// 定义本地存储路径(跨平台兼容,Android/iOS都会指向应用私有目录)
var localDbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "dbfilename.db");

// 只在第一次运行时复制,避免每次覆盖现有数据库
if (!File.Exists(localDbPath))
{
    using (var fileStream = new FileStream(localDbPath, FileMode.Create))
    {
        resourceStream.CopyTo(fileStream);
    }
}

3. 连接本地数据库文件

现在就可以正常连接这个本地路径的数据库了:

using (var con = new SqliteConnection($"DataSource={localDbPath}"))
{
    con.Open();
    var cmd = con.CreateCommand();
    cmd.CommandText = "SELECT * FROM Table;";
    var reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        // 处理读取的数据
    }
}

最后再检查几个关键配置

  • 确认你的.db文件属性:生成操作=嵌入式资源,复制到输出目录=不复制(既然已经嵌入程序集,就不需要再复制了)
  • 如果是Android项目,确保没有在Android的Assets文件夹里重复放这个文件,避免混淆
  • 资源名称的大小写要注意,有些平台对大小写敏感(比如Android)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:52:33