.NET6 Azure Function v4访问DbContext触发MissingMethodException错误
问题分析与解决方案
核心问题定位
System.MissingMethodException 本质是依赖版本不兼容:项目基于.NET6开发,但共享类库SharedStartup.csproj中引用了Microsoft.Extensions.DependencyInjection和Microsoft.Extensions.DependencyInjection.Abstractions的7.0.0版本。这两个包的7.x版本属于.NET7生态,与.NET6底层依赖(如Microsoft.Extensions.Caching.Memory)存在构造函数签名差异,导致EF Core初始化时找不到预期的MemoryCache构造方法。
分步解决方案
1. 统一共享类库的依赖版本
修改SharedStartup.csproj中的依赖版本,将Microsoft.Extensions.DependencyInjection和Microsoft.Extensions.DependencyInjection.Abstractions降级到.NET6兼容的6.x版本(建议与其他扩展包版本保持一致):
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
2. 清理并重建项目
- 删除所有项目的
bin和obj目录 - 在解决方案根目录执行以下命令:
dotnet clean dotnet restore dotnet build
3. 优化DbContext使用方式(可选,更符合DI规范)
已注册DbContextFactory,但Repository中手动new MyDbContext的方式未利用DI容器的生命周期管理,建议改为通过工厂获取实例:
private readonly IDbContextFactory<MyDbContext> _contextFactory; private readonly ICurrentUser _currentUser; private readonly IDbConnectionService _dbConnectionService; public MyRepository( IRepositoryDependencyProvider repositoryDependencyProvider, IDbContextFactory<MyDbContext> contextFactory, ICurrentUser currentUser, IDbConnectionService dbConnectionService) : base(repositoryDependencyProvider) { _contextFactory = contextFactory; _currentUser = currentUser; _dbConnectionService = dbConnectionService; } public MobileInstallation Find(Guid installationID) { using var context = _contextFactory.CreateDbContext(); var userID = _currentUser.GetUserID(); return context.MobileInstallations.Where(r => r.InstallationID == installationID && r.UserID == userID).FirstOrDefault(); }
同时需调整MyDbContext的构造逻辑,确保能通过工厂正确初始化分片信息。
额外检查点
- 确认所有项目的
TargetFramework均为net6.0,无跨版本混用 - 检查所有
Microsoft.Extensions.*系列包版本,统一为6.x,避免版本冲突 - 确保
Microsoft.NET.Sdk.Functions版本(当前4.2.0)与.NET6、Azure Functions v4兼容
内容的提问来源于stack exchange,提问作者wilsjd
相关产品推荐
相关产品推荐

