.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>节点的名称完全一致,包括大小写。清理并重建迁移文件
即使迁移代码已移到类库,旧迁移文件可能残留启动项目的关联信息,按以下步骤操作:- 删除Web项目中剩余的Migrations文件夹(如果存在)
- 在Package Manager Console中,将默认项目切换为
DataLibrary,执行命令重新生成迁移:Add-Migration InitialCreate -Project EITWeb.DataLibrary -StartupProject EITWeb - 同步数据库验证:
Update-Database -Project EITWeb.DataLibrary -StartupProject EITWeb
确认程序集复制配置
检查Web项目对DataLibrary的引用属性:- 在Web项目的引用列表中找到
EITWeb.DataLibrary - 右键打开属性面板,确保
Copy Local(.NET Core中对应Private)设置为True
清理发布目录后重新发布,避免旧版本程序集干扰。
- 在Web项目的引用列表中找到
修复程序集加载上下文问题
若在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
相关产品推荐
相关产品推荐

