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

MAUI应用iOS平台操作SQLite时触发System.Windows.Forms加载失败异常

MAUI iOS平台SQLite数据库连接异常排查与解决

问题场景

MAUI应用读写本地SQLite数据库时,Android平台运行正常,iOS平台抛出文件找不到异常。

异常详情

System.IO.FileNotFoundException: 无法加载文件或程序集'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'或其依赖项之一。
文件名: 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
at MyApp.SqlHelper.GetConnection() in /Users/MyCompany/Projects/MyProject-maui/MyProject/Renderers/SqlHelper.cs:line 28
at MyApp.SqlHelper..ctor() in /Users/MyCompany/Projects/MyProject-maui/MyProject/Renderers/SqlHelper.cs:line 18
at MyProject.App.get_Database() in /Users/MyCompany/Projects/MyProject-maui/MyProject/App.xaml.cs:line 92

已安装的NuGet包

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

相关代码片段

App.xaml.cs

public static SqlHelper Database
{
    get
    {
        if (database == null)
        {
            database = new SqlHelper();
        }
        return database;
    }
}

SqlHelper.cs

public SqlHelper()
{
    database = GetConnection();//异常触发于此行
    database.CreateTable<Favorites>();
}

GetConnection方法

public SQLite.SQLiteConnection GetConnection()
{
    SQLiteConnection sqlitConnection;
    var sqliteFilename = "Favorites.db3";
    IFolder folder = FileSystem.Current.LocalStorage;
    string path = PortablePath.Combine(folder.Path.ToString(), sqliteFilename);
    sqlitConnection = new SQLite.SQLiteConnection(path);
    return sqlitConnection;
}

解决步骤

  1. 精简NuGet依赖
    SQLitePCLRaw.bundle_green已包含SQLitePCLRaw.core、基础提供者等核心组件,移除重复安装的SQLitePCLRaw.core、SQLitePCLRaw.provider.dynamic_cdecl、SQLitePCLRaw.provider.sqlite3包,避免跨平台依赖冲突。

  2. 修正路径处理逻辑
    iOS平台对文件路径有特殊要求,替换PortablePath.Combine为MAUI原生的Path.Combine,并使用AppDataDirectory确保路径正确性:

    public SQLite.SQLiteConnection GetConnection()
    {
        var sqliteFilename = "Favorites.db3";
        string path = Path.Combine(FileSystem.Current.AppDataDirectory, sqliteFilename);
        return new SQLite.SQLiteConnection(path);
    }
    
  3. 验证iOS平台原生库配置
    确认iOS项目自动引入对应平台的SQLite原生库(SQLitePCLRaw.bundle_green通常会自动处理),若仍有问题,可单独添加SQLitePCLRaw.provider.sqlite3.ios包。

  4. 清理重建项目

    • 删除所有项目的bin和obj目录
    • 卸载并重新安装所有NuGet包
    • 重启开发工具后重新编译iOS项目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:43:22