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

.NET MAUI升级.NET 9/EF Core 9遇MissingMethodException问题求助

.NET MAUI升级到.NET9 + EF Core9后出现MissingMethodException(MigrationsModelDiffer构造函数未找到)

问题详情

将现有.NET MAUI应用从.NET8升级到.NET9,同步更新EF Core引用至9.0.0版本后,应用构建成功,但调用代码var historyRepository = dbContext.GetService<IHistoryRepository>()时触发运行时错误,抛出MissingMethodException,提示找不到Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer的特定构造函数,推测HistoryRepositoryDependencies无法被正确解析。

异常堆栈

{System.MissingMethodException: Method not found: void Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationsModelDiffer..ctor(Microsoft.EntityFrameworkCore.Storage.IRelationalTypeMappingSource,Microsoft.EntityFrameworkCore.Migrations.IMigrationsAnnotationProvider,Microsoft.EntityFrameworkCore.Update.Internal.IRowIdentityMapFactory,Microsoft.EntityFrameworkCore.Update.Internal.CommandBatchPreparerDependencies)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Constructor(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeWithManyArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSiteMain(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSiteMain(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSiteMain(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSiteMain(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSiteMain(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScopeCache(ServiceCallSite callSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2[[Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeResolverContext, Microsoft.Extensions.DependencyInjection, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.Object, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].VisitCallSite(ServiceCallSite callSite, RuntimeResolverContext argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.RuntimeServiceProviderEngine.&lt;&gt;c__DisplayClass4_0.&lt;RealizeService&gt;b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(ServiceIdentifier serviceIdentifier, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[IHistoryRepository](IServiceProvider provider)
   at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.GetRelationalService[IHistoryRepository](IInfrastructure`1 databaseFacade)

项目包引用

<PackageReference Include="AutoMapper.Collection" Version="10.0.0" />
 <PackageReference Include="CommunityToolkit.Maui" Version="9.1.1" />
 <PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
 <PackageReference Include="Laraue.EfCoreTriggers.SqlLite" Version="8.1.2" />
 <PackageReference Include="MediatR" Version="12.4.1" />
 <PackageReference Include="Microsoft.AppCenter.Analytics" Version="5.0.6" />
 <PackageReference Include="Microsoft.AppCenter.Crashes" Version="5.0.6" />
 <PackageReference Include="Microsoft.ApplicationInsights" Version="2.22.0" />
 <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0" />
 <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.0" />
 <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
 <PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="9.0.0" />
 <PackageReference Include="Mopups" Version="1.3.2" />
 <PackageReference Include="OneOf" Version="3.0.271" />
 <PackageReference Include="Plugin.Maui.ScreenBrightness" Version="1.0.0-preview3" />
 <PackageReference Include="Prism.DryIoc.Maui" Version="9.0.537" />
 <PackageReference Include="Prism.Maui" Version="9.0.537" />
 <PackageReference Include="Prism.Maui.Rx" Version="9.0.537" />
 <PackageReference Include="PureWeen.Maui.FixesAndWorkarounds" Version="1.5.0" />
 <PackageReference Include="ReactiveUI.Fody" Version="19.5.1" />
 <PackageReference Include="ReactiveUI.Maui" Version="19.5.1" />
 <PackageReference Include="Serilog" Version="4.1.0" />
 <PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
 <PackageReference Include="Serilog.Formatting.Compact" Version="3.0.0" />
 <PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="4.0.0" />
 <PackageReference Include="Serilog.Sinks.Async" Version="2.1.0" />
 <PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
 <PackageReference Include="Shiny.Core" Version="3.3.3" />
 <PackageReference Include="Shiny.Extensions.Push.Abstractions" Version="1.1.0.60" />
 <PackageReference Include="Shiny.Hosting.Maui" Version="3.3.3" />
 <PackageReference Include="Shiny.Locations" Version="3.3.3" />
 <PackageReference Include="Shiny.Net.Http" Version="3.3.3" />
 <PackageReference Include="Shiny.Notifications" Version="3.3.3" />
 <PackageReference Include="Shiny.Push" Version="3.3.3" />
 <PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
 <PackageReference Include="SQLitePCLRaw.bundle_green" Version="2.1.10" />
 <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.2.1" />
 <PackageReference Include="Telerik.Documents.ImageUtils" Version="2024.3.806" />
 <PackageReference Include="Telerik.UI.for.Maui" Version="7.1.0" />
 <PackageReference Include="Xamarin.MediaGallery" Version="2.2.1" />
 <PackageReference Include="ZXing.Net.Maui" Version="0.4.0" />
 <PackageReference Include="ZXing.Net.Maui.Controls" Version="0.4.0" />

问题原因

  • EF Core扩展库版本不兼容:项目中引用的Laraue.EfCoreTriggers.SqlLite版本为8.1.2,该版本是针对EF Core8开发的,内部依赖的MigrationsModelDiffer构造函数签名在EF Core9中已发生变更,导致运行时无法找到匹配的构造函数,进而引发依赖解析失败。
  • EF Core9对内部服务的构造函数做了调整,比如MigrationsModelDiffer的参数列表可能新增或修改,旧版本的扩展库仍尝试调用旧的构造函数签名,触发MissingMethodException。

解决方案

1. 升级EF Core相关扩展库到兼容版本

  • 检查Laraue.EfCoreTriggers.SqlLite是否有支持.NET9/EF Core9的版本,替换为对应版本(若已发布9.x版本则直接升级)。
  • 若该库暂未发布兼容版本,可采取以下临时方案:
    • 暂时移除该库,重新构建并运行应用,验证是否能正常访问数据库,确认问题根源。
    • 等待库作者更新兼容版本。
    • 自行fork仓库,修改代码适配EF Core9的构造函数签名。

2. 清理项目依赖缓存

  • 删除项目目录下的bin和obj文件夹,重新构建项目。
  • 执行命令行操作:
    dotnet clean
    dotnet restore
    dotnet build
    

3. 验证所有EF Core相关包版本一致性

  • 确保所有Microsoft.EntityFrameworkCore.*系列包均为9.0.0版本,避免混合版本导致依赖冲突。
  • 检查其他第三方库是否依赖EF Core,确保其版本与EF Core9兼容。

验证步骤

升级完成后,重新运行应用,调用dbContext.GetService<IHistoryRepository>()验证异常是否解决。若仍存在问题,继续排查其他未升级的EF Core相关扩展库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:19:52