首页 > 解决方案 > 无法为方法“Configure”的参数“identityDbContextOptions”解析“EntityFrameworkCore.DbContextOptions`1[Db] 类型的服务”

问题描述

首先,该项目现在在 Windows 上成功运行,并且在上次更新之前在 Linux 主机上成功运行。更新新版本后,我收到错误:

Frontend[30348]:  ---> System.IO.FileLoadException: Could not load file or assembly 'Pomelo.EntityFrameworkCore.MySql, Version=3.1.2.0, Culture=neutral, PublicKeyToken=2cc498582444921b'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)
Frontend[30348]: File name: 'Pomelo.EntityFrameworkCore.MySql, Version=3.1.2.0, Culture=neutral, PublicKeyToken=2cc498582444921b'
Frontend[30348]:    at Frontend1.Startup.<>c.<ConfigureServices>b__9_0(DbContextOptionsBuilder options)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass1_0`2.<AddDbContext>b__0(IServiceProvider p, DbContextOptionsBuilder b)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.CreateDbContextOptions[TContext](IServiceProvider applicationServiceProvider, Action`2 optionsAction)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions.<>c__DisplayClass10_0`1.<AddCoreServices>b__0(IServiceProvider p)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitDisposeCache(ServiceCallSite transientCallSite, RuntimeResolverContext context)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
Frontend[30348]:    at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
Frontend[30348]:    at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
Frontend[30348]:    --- End of inner exception stack trace ---
Frontend[30348]:    at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder)
Frontend[30348]:    at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.<Build>b__0(IApplicationBuilder builder)
Frontend[30348]:    at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.<UseStartup>b__2(IApplicationBuilder app)
Frontend[30348]:    at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.<Configure>g__MiddlewareFilterBuilder|0(IApplicationBuilder builder)
Frontend[30348]:    at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.<Configure>b__0(IApplicationBuilder app)
Frontend[30348]:    at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken)
Frontend[30348]: Unhandled exception. System.Exception: Could not resolve a service of type 'Microsoft.EntityFrameworkCore.DbContextOptions`1[[NewDb.Models.ApplicationDbContext, NewDb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' for the parameter 'identityDbContextOptions' of method 'Configure' on type 'Frontend1.Startup'.

这是什么意思?

  1. 我将我的项目部署为二进制托管。托管中存在的所有 NET CORE 库。还可以重定向到项目文件中的另一个库版本(并且存在结果文件 Frontend.dll.config)。

  2. 我与我的数据库定义共享库,该定义共享了大约 10 个项目。在具有数据库定义的项目中,我只有 POCO 类。具有 DB 定义的库位于项目文件夹中。带有连接字符串的 application.json 也存在于主机中。

  3. 在项目中我有这个配置。现在这个配置在 Windows 中完美运行,并且在 Linux 主机上也可以使用以前的版本。

     services.AddDbContext<ApplicationDbContext>(
         (Microsoft.EntityFrameworkCore.DbContextOptionsBuilder options) =>
         options.UseMySql(Configuration.GetConnectionString("DefaultConnection"),
         (Microsoft.EntityFrameworkCore.Infrastructure.MySqlDbContextOptionsBuilder mySqlOption) =>
         {
             mySqlOption.CommandTimeout(10);
             mySqlOption.EnableRetryOnFailure(10);
         }),
         ServiceLifetime.Transient, ServiceLifetime.Transient);
    
     services.AddIdentity<ApplicationUser, IdentityRole>(options =>
     {
         options.Password.RequiredLength = 4;
         options.Password.RequireUppercase = false;
         options.Password.RequireLowercase = false;
         options.Password.RequireUppercase = false;
         options.Password.RequireNonAlphanumeric = false;
         options.SignIn.RequireConfirmedEmail = true;
    
     }).AddEntityFrameworkStores<ApplicationDbContext>()
     .AddDefaultTokenProviders();
    

标签: mysqllinuxasp.net-coredependency-injectionentity-framework-core

解决方案


我已经从 C:\Users\khark.nuget\packages\pomelo.entityframeworkcore.mysql\3.1.2 上传了库(而不是发布项目的目录)并且项目正在提升。


推荐阅读