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

FluentMigrator在.NET 8 MAUI iOS AOT编译下的问题及依赖精简需求

解决方案:仅引入SQLite运行器避免AOT编译失败

完全可以只引入所需的SQLite运行器,不需要依赖包含全量运行器的FluentRunner.Runner包,具体操作如下:

  1. 移除全量运行器包
    先从项目中移除FluentRunner.Runner的NuGet引用,这个包是元包,会自动引入SQLServerCE、Hana等所有数据库的运行器实现,正是这些多余的依赖导致iOS AOT编译失败。

  2. 添加SQLite相关的最小依赖
    只添加以下必要的NuGet包:

    • FluentMigrator:FluentMigrator的核心功能库
    • FluentMigrator.Runner.SQLite:针对SQLite的运行器实现(如果你的项目用的是Microsoft.Data.Sqlite,可以改用FluentMigrator.Runner.SQLite.Microsoft.Data.Sqlite,根据实际SQLite库选择)
  3. 配置运行器服务
    在代码中配置FluentMigrator时,只注册SQLite相关的服务,示例代码如下:

    using FluentMigrator.Runner;
    using Microsoft.Extensions.DependencyInjection;
    
    var services = new ServiceCollection()
        .AddFluentMigratorCore()
        .ConfigureRunner(rb => rb
            .AddSQLite() // 仅注册SQLite运行器
            .WithGlobalConnectionString("你的SQLite连接字符串")
            .ScanIn(typeof(你的迁移类).Assembly).For.Migrations())
        .AddLogging(lb => lb.AddFluentMigratorConsole());
    
    var serviceProvider = services.BuildServiceProvider();
    using var scope = serviceProvider.CreateScope();
    var runner = scope.ServiceProvider.GetRequiredService<IMigrationRunner>();
    runner.MigrateUp();
    
  4. 重新执行发布命令
    再次运行发布命令:

    dotnet publish -c Release -f net8.0-ios project.csproj
    

    此时项目不再包含SQLServerCE等多余依赖,AOT编译应该可以正常完成。

原因说明

FluentRunner.Runner作为元包的设计是为了方便快速引入所有数据库支持,但在iOS这类对AOT编译要求严格的平台上,很多非必要的数据库驱动(比如SQLServerCE)本身不支持iOS环境,或者包含无法被AOT编译器处理的代码,从而触发编译错误。通过只引入目标数据库的运行器,就能规避这些不必要的依赖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 03:11:03