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

如何仅针对SQL Server使用FluentMigrator.Runner

解决Fluent Migrator 3.x仅保留SQL Server支持的问题

这个问题在Fluent Migrator 3.x版本里确实挺常见的——主FluentMigrator.Runner包默认依赖了所有数据库的实现包,导致你被迫引入一堆不需要的DLL。不过有个简单的解决办法,就是放弃安装主Runner包,转而直接安装SQL Server专属的Runner包,具体步骤如下:

1. 清理现有冗余依赖

首先把所有已安装的FluentMigrator相关包彻底卸载,包括主Runner包和那些不需要的数据库实现包。在Package Manager Console里执行:

# 先卸载主Runner包并移除所有关联依赖
Uninstall-Package FluentMigrator.Runner -RemoveDependencies
# 如果还有残留的其他数据库包,强制卸载
Uninstall-Package FluentMigrator.Runner.Db2 -Force
Uninstall-Package FluentMigrator.Runner.Firebird -Force
# 其他不需要的包同理执行卸载

2. 安装仅SQL Server所需的包

接下来只安装核心API包和SQL Server专属的Runner包:

Install-Package FluentMigrator
Install-Package FluentMigrator.Runner.SqlServer

这样操作后,项目只会引入SQL Server相关的依赖,不会再自动下载Db2、Firebird等其他数据库的实现文件。

3. 调整代码配置(关键步骤)

原来的代码如果是通过AddRunner()注册全量数据库支持的,现在要改成仅注册SQL Server的支持。比如在依赖注入配置中:

using FluentMigrator.Runner;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();
services.AddFluentMigratorCore()
    .ConfigureRunner(rb => rb
        // 仅添加SQL Server的驱动支持
        .AddSqlServer()
        // 配置你的SQL Server连接字符串
        .WithGlobalConnectionString("Server=.;Database=YourTargetDB;Trusted_Connection=True;")
        // 扫描迁移类所在的程序集
        .ScanIn(typeof(InitialCreateMigration).Assembly).For.Migrations());

var serviceProvider = services.BuildServiceProvider();
var migrationRunner = serviceProvider.GetRequiredService<IMigrationRunner>();
// 执行数据库迁移
migrationRunner.MigrateUp();

为什么之前强制删除会报错?

FluentMigrator 3.x的主Runner包内部会尝试通过反射加载所有已注册的数据库驱动实现,哪怕你实际没用到它们。如果删除了这些DLL,运行时就会找不到对应的程序集,从而抛出你遇到的Could not load file or assembly错误。而使用专属Runner包后,只会注册SQL Server的驱动逻辑,不会触发其他数据库的加载请求,自然就不会出现这个问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:52:06