.NET MAUI集成SQLiteDataAdapter发布Android遇PE元数据缺失错误求助
在.NET MAUI中使用SQLiteDataAdapter连接SQLite数据库并解决Android发布错误
错误原因
System.Data.SQLite NuGet包并非为.NET MAUI这类跨平台移动框架设计,其包含的Windows平台原生PE文件在Android发布流程中被错误处理,导致元数据读取失败,触发XAPRAS7009错误。
解决方案
方案一:改用官方兼容的Microsoft.Data.Sqlite(推荐)
这是微软官方推出的跨平台SQLite库,完美适配.NET MAUI,支持类似SQLiteDataAdapter的数据操作能力:
- 卸载项目中的
System.Data.SQLiteNuGet包,安装Microsoft.Data.Sqlite包。 - 使用
SqliteDataAdapter实现数据查询与填充,示例代码:
using Microsoft.Data.Sqlite; using System.Data; // 获取MAUI跨平台数据库路径 string dbPath = Path.Combine(FileSystem.AppDataDirectory, "app_database.db"); // 建立数据库连接 using var connection = new SqliteConnection($"Data Source={dbPath}"); connection.Open(); // 使用SqliteDataAdapter填充DataTable string query = "SELECT * FROM UserInfo"; using var adapter = new SqliteDataAdapter(query, connection); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); // 对DataTable进行后续操作 foreach (DataRow row in dataTable.Rows) { // 处理数据逻辑 }
方案二:强制适配System.Data.SQLite到Android(不推荐)
若必须使用System.Data.SQLite,需通过项目配置排除不兼容的原生文件:
- 编辑项目的
.csproj文件,添加以下配置(替换版本号为你使用的System.Data.SQLite版本):
<ItemGroup Condition="$(TargetFramework) == 'net7.0-android'"> <PackageReference Include="System.Data.SQLite.Core" Version="1.0.118" /> <None Remove="$(NuGetPackageRoot)\system.data.sqlite.core\1.0.118\runtimes\win\**" /> <None Remove="$(NuGetPackageRoot)\system.data.sqlite.core\1.0.118\runtimes\unix\**" /> <NativeLibrary Include="$(NuGetPackageRoot)\system.data.sqlite.core\1.0.118\runtimes\android\**" /> </ItemGroup>
- 保存配置后,重新执行发布命令。
发布验证
使用你原来的发布命令(替换占位符为实际参数):
dotnet publish -f net7.0-android -c Release -p:AndroidKeyStore=true -p:AndroidSigningKeyStore=你的密钥库文件路径 -p:AndroidSigningKeyAlias=你的密钥别名 -p:AndroidSigningKeyPass=你的密钥密码 -p:AndroidSigningStorePass=你的密钥库密码
内容的提问来源于stack exchange,提问作者Hassam Fares
相关产品推荐
相关产品推荐

