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

.NET Core 7迁移数据库上下文到类库后遇FileNotFoundException

解决EF Core迁移时找不到类库程序集的问题

排查与修复步骤

  • 显式指定迁移程序集
    在Web项目的Program.cs中配置DbContext时,必须明确指定迁移所在的类库程序集,避免EF Core默认从启动项目查找:

    builder.Services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            builder.Configuration.GetConnectionString("DefaultConnection"),
            b => b.MigrationsAssembly("EITWeb.DataLibrary")));
    

    注意要和类库项目.csproj文件里<AssemblyName>节点的名称完全一致,包括大小写。

  • 清理并重建迁移文件
    即使迁移代码已移到类库,旧迁移文件可能残留启动项目的关联信息,按以下步骤操作:

    1. 删除Web项目中剩余的Migrations文件夹(如果存在)
    2. 在Package Manager Console中,将默认项目切换为DataLibrary,执行命令重新生成迁移:
      Add-Migration InitialCreate -Project EITWeb.DataLibrary -StartupProject EITWeb
      
    3. 同步数据库验证:
      Update-Database -Project EITWeb.DataLibrary -StartupProject EITWeb
      
  • 确认程序集复制配置
    检查Web项目对DataLibrary的引用属性:

    1. 在Web项目的引用列表中找到EITWeb.DataLibrary
    2. 右键打开属性面板,确保Copy Local(.NET Core中对应Private)设置为True
      清理发布目录后重新发布,避免旧版本程序集干扰。
  • 修复程序集加载上下文问题
    若在Windows服务环境运行,可能存在延迟加载导致的程序集找不到问题,可手动提前加载类库程序集:

    var assembly = System.Reflection.Assembly.Load("EITWeb.DataLibrary");
    options.UseSqlServer(connectionString, b => b.MigrationsAssembly(assembly.FullName));
    
  • 验证迁移文件的正确性
    打开DataLibrary中的迁移文件,确认:

    • 命名空间为EITWeb.DataLibrary.Migrations
    • 迁移Designer文件中DbContextModelSnapshot的[DbContext(typeof(ApplicationDbContext))]属性指向正确的上下文类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:52:10