在尝试在Android上使用.net MAUI建立SQLite连接时,出现FileNotFoundException错误

11

db = new SQLiteConnection(databasePath);

在Windows上,上述语句可以正常工作,但在Android上会出现以下错误。在xamarin forms上的两个平台上也可以正常工作。

System.IO.FileNotFoundException:“无法加载文件或程序集”SQLitePCLRaw.provider.dynamic_cdecl, Version=2.0.4.976, Culture=neutral, PublicKeyToken=b68184102cba0b3b“或其一个依赖项。”

感谢任何帮助。


错误是发生在真实的Android设备上还是模拟器上?你已经安装了所有必要的NuGet包吗?请通过GitHub仓库创建一个最小化、可重现的示例 - Alexandar May - MSFT
2个回答

18

当在MAUI项目中使用sqlite时,有一些需要注意的事项。

1.确保已安装以下nuget包:

 <ItemGroup>
    <PackageReference Include="sqlite-net-pcl" Version="1.8.116" />
    <PackageReference Include="SQLiteNetExtensions.Async" Version="2.1.0" />
    <PackageReference Include="SQLitePCLRaw.core" Version="2.1.0-pre20220207221914" />
    <PackageReference Include="SQLitePCLRaw.bundle_green" Version="2.1.0-pre20220207221914" />
    <PackageReference Include="SQLitePCLRaw.provider.dynamic_cdecl" Version="2.1.0-pre20220207221914" />
    <PackageReference Include="SQLitePCLRaw.provider.sqlite3" Version="2.1.0-pre20220207221914" />
  </ItemGroup>

2.使用SQLiteAsyncConnection初始化数据库连接。

Database = new SQLiteAsyncConnection(Constants.DatabasePath, Constants.Flags);

然后创建静态类 Constants,如下所示:

 public static class Constants
    {
        public const string DatabaseFilename = "MySQLite.db3";
        public const SQLite.SQLiteOpenFlags Flags =
            SQLite.SQLiteOpenFlags.ReadWrite |
            SQLite.SQLiteOpenFlags.Create |
            SQLite.SQLiteOpenFlags.SharedCache;
        public static string DatabasePath
        {
            get
            {
                var basePath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
                return Path.Combine(basePath, DatabaseFilename);
            }
        }
    }

SQLiteAsyncConnectionSQLiteConnection 都给我运行时错误。 - djack109
1
这一周我一直在寻找解决方案,结果只需要添加几个包就行了...非常感谢你让我的一天变得美好! - Al John
这刚刚解决了我所有SQLite启动问题 谢谢!!! - Vfleitao

1

我遇到了相同的异常。

这是由于项目名称中有空格导致的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接