EF Core中实例化DBContext时出现异常,请求技术帮助
解决EF Core 2.1.0运行时找不到Microsoft.Extensions.DependencyInjection.Abstractions的问题
我之前也踩过这种「明明程序集就在引用路径里,但运行时死活找不到」的坑,给你几个针对性的排查和解决方向:
1. 检查并添加程序集绑定重定向
Web项目经常会因为依赖版本冲突导致CLR加载错误的程序集版本,你可以手动在Web.config里添加绑定重定向规则:
- 打开项目根目录的
Web.config,找到<runtime>节点(如果没有就新建一个),插入以下配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
- 保存后清理项目的
bin和obj文件夹,重新生成解决方案,确保bin目录下的Microsoft.Extensions.DependencyInjection.Abstractions.dll版本是2.1.0.0。
2. 强制统一依赖版本
可能有其他第三方包偷偷引用了更低版本的Microsoft.Extensions.DependencyInjection.Abstractions,导致版本不一致:
- 打开Package Manager Console,执行命令查看项目的所有依赖:
Get-Package -ProjectName 你的Web项目名称
- 搜索输出里有没有版本低于2.1.0的
Microsoft.Extensions.DependencyInjection.Abstractions,如果有,手动安装指定版本强制覆盖:
Install-Package Microsoft.Extensions.DependencyInjection.Abstractions -Version 2.1.0 -ProjectName 你的Web项目名称
3. 清理IIS/IIS Express的缓存
IIS的影子复制机制可能缓存了旧版本的程序集,导致运行时加载错误:
- 完全退出IIS Express:右键任务栏的IIS Express图标,选择「退出」;
- 手动删除项目的
bin和obj文件夹; - 重启Visual Studio,重新生成并运行项目。
4. 检查DbContext的初始化方式
从你的调用栈看,RepoContext用了无参构造函数,EF Core 2.x更推荐依赖注入的方式初始化DbContext,无参构造可能会导致依赖加载异常:
- 修改
RepoContext的构造函数,改为接收DbContextOptions:
public class RepoContext : DbContext { public RepoContext(DbContextOptions<RepoContext> options) : base(options) { } }
- 在项目的Startup类中配置DbContext的依赖注入:
services.AddDbContext<RepoContext>(options => options.UseSqlServer(Configuration.GetConnectionString("你的数据库连接字符串")));
- 确保业务层的
AccountBLL是通过构造函数注入获取RepoContext,而不是手动new RepoContext()。
内容的提问来源于stack exchange,提问作者Fio
相关产品推荐
相关产品推荐

